題目1: jQuery 能做什么沫换?
jQuery是一個javascript的函數(shù)庫软驰。jQuery的語法操作使得許多操作變得容易,如操作文檔對象夸赫,選擇文檔對象模型元素,創(chuàng)建動畫效果咖城,處理事件茬腿,以及開發(fā)AJAX程序。jQuery也提供了給開發(fā)人員在其上創(chuàng)建插件的能力宜雀,這使開發(fā)人員可以對底層交互與動畫切平、高級效果和高級主題化的組件進(jìn)行抽象化。模塊化的方式使jQuery函數(shù)庫能夠創(chuàng)建功能強(qiáng)大的動態(tài)網(wǎng)頁以及網(wǎng)絡(luò)應(yīng)用程序
題目2: jQuery 對象和 DOM 原生對象有什么區(qū)別州袒?如何轉(zhuǎn)化揭绑?
DOM對象是使用傳統(tǒng)javascript獲取的對象,jQuery對象是通過jQuery的類選擇器獲得的對象郎哭。jQuery對象就是通過jQuery包裝DOM對象后產(chǎn)生的對象他匪。jQuery對象是可以使用jQuery的方法,但是不能使用DOM方法夸研。DOM對象只能使用DOM方法邦蜜,不能使用jQuery方法。
jQuery轉(zhuǎn)DOM對象有兩種轉(zhuǎn)換方式亥至,[index]
和.get(index)
$('#v'); //jQuery對象
$('#v')[0]; //DOM對象
$('#v').get(0); //DOM對象
DOM對象轉(zhuǎn)jQuery對象
var v = document.getElementById('v'); //DOM對象
var v2 = $(v); //DOM對象轉(zhuǎn)jQuery對象
題目3:jQuery中如何綁定事件悼沈?bind侣夷、unbind、delegate组橄、live帆赢、on、off都有什么作用壤靶?推薦使用哪種缚俏?使用on綁定事件使用事件代理的寫法?
jQuery事件是DOM事件的封裝贮乳,同時支持自定義擴(kuò)展忧换。一般使用bind
、on
向拆、live
亚茬、delegate
、keyup(<function>)
來綁定事件浓恳。
bind
<div id='foo'></div>
<script>
$('#foo').click(function(){
console.log('clicked!');
});
</script>
.click(<function>)
等效于.bind('click', <function>)
刹缝。另外還可以通過unbind
來解綁事件:
$('#foo').unbind('click');
.bind
將會給所有匹配的元素都綁定一次事件,當(dāng)元素很多時性能會變差奖蔓。后來新增的元素不會被綁定赞草。頁面加載完成時,才能進(jìn)行bind
吆鹤。
Delegate
.delegate
也是綁定事件的方法,它將事件處理函數(shù)綁定在指定的根元素上厨疙,由于事件會冒泡,可以用來處理指定的子元素上的事件疑务。
<div id="root">
<a>Alice</a>
<a>Bob</a>
</div>
<script>
$('#root').delegate('a', 'click', function(){
console.log('clicked');
});
</script>
- 自動綁定動態(tài)添加的元素沾凄,因?yàn)槭录幚砗瘮?shù)綁定在
#root
上,新加的子元素事件也會冒泡到#root
- 性能好于
bind()
知允。只綁定一個事件處理函數(shù)撒蟀,綁定速度相當(dāng)快。
live
.live()
方法會綁定相應(yīng)的事件到你所選擇的元素的根元素上温鸽,即是document元素上保屯。那么所有通過冒泡上來的事件都可以用這個相同的handler來處理了。
優(yōu)點(diǎn):
- 這里僅有一次的事件綁定涤垫,綁定到document上而不像.bind()那樣給所有的元素挨個綁定
- 那些動態(tài)添加的elemtns依然可以觸發(fā)那些早先綁定的事件姑尺,因?yàn)槭录嬲慕壎ㄊ窃赿ocument上
- 你可以在document ready之前就可以綁定那些需要的事件
缺點(diǎn):
- 從1.7開始已經(jīng)不被推薦了,所以你也要開始逐步淘汰它了蝠猬。
- Chaining沒有被正確的支持
- 當(dāng)使用event.stopPropagation()是沒用的切蟋,因?yàn)槎家竭_(dá)document
- 因?yàn)樗械膕elector/event都被綁定到document, 所以當(dāng)我們使用matchSelector方法來選出那個事件被調(diào)用時,會非常慢
- 當(dāng)發(fā)生事件的元素在你的DOM樹中很深的時候榆芦,會有performance問題
on
其實(shí).bind(), .live(), .delegate()都是通過.on()來實(shí)現(xiàn)的柄粹,.unbind(), .die(), .undelegate(),也是一樣的都是通過.off()來實(shí)現(xiàn)的喘鸟。
// Bind
$( "#members li a" ).on( "click", function( e ) {} );
$( "#members li a" ).bind( "click", function( e ) {} );
// Live
$( document ).on( "click", "#members li a", function( e ) {} );
$( "#members li a" ).live( "click", function( e ) {} );
// Delegate
$( "#members" ).on( "click", "li a", function( e ) {} );
$( "#members" ).delegate( "li a", "click", function( e ) {} );
一般推薦使用on
來綁定事件。
題目4:jQuery 如何展示/隱藏元素驻右?
//使用hide(), show()方法
$('#div').show();
$('#div').hide();
//使用attr()方法設(shè)置屬性
$('#div').attr("style", "display:none;");
$('#div').attr("style", "display:block;");
//使用css()方法
$('#div')..css('display', 'none');
$('#div')..css('display', 'block');
題目5: jQuery 動畫如何使用什黑?
.animate()
一共有兩種方法:
-
.animate( properties [, duration ] [, easing ] [, complete ] )
properties
是必須的,規(guī)定產(chǎn)生動畫效果的CSS樣式和值堪夭。
duration
可選兑凿,規(guī)定動畫的速度,默認(rèn)是normal
400
easing
設(shè)置easing函數(shù),默認(rèn)是swing
complete
animate執(zhí)行完之后要執(zhí)行的函數(shù) -
.animate( properties, options )
properties
規(guī)定產(chǎn)生動畫效果的 CSS 樣式和值
options
規(guī)定動畫的額外選項(xiàng)
題目6:如何設(shè)置和獲取元素內(nèi)部 HTML 內(nèi)容茵瘾?如何設(shè)置和獲取元素內(nèi)部文本?
可以使用html()
方法來獲取元素內(nèi)部的HTML內(nèi)容 使用.html( htmlString )
來設(shè)置元素內(nèi)部的HTML內(nèi)容咐鹤。
使用text()
方法來獲取元素內(nèi)部的文本拗秘,使用text(text)
來設(shè)置元素內(nèi)部文本
題目7:如何設(shè)置和獲取表單用戶輸入或者選擇的內(nèi)容?如何設(shè)置和獲取元素屬性祈惶?
//獲取input text輸入的內(nèi)容
$('input[type=text]').val()
//獲取radio的值
$('input[type=radio]').val()
//獲取select的值
$('select').val()
//獲取select name 屬性
$('select').attr('name')
//設(shè)置select name屬性
$('select').attr("name", "test")
$('select').attr({name: 'test'})