理解 jQuery

1、還有必要學(xué)習(xí) jQuery 嗎

首先必須肯定的回答:有必要。
雖然目前 MVVM 框架很流行,但 jQuery 依然占據(jù)一定地位。某些特定場(chǎng)景的項(xiàng)目 jQuery 依然是最好的選擇,jQuery幫助我們解決了太多的兼容性問(wèn)題,而且對(duì)于有一定JS基礎(chǔ)的人來(lái)說(shuō)學(xué)習(xí) jQuery 的成本很低,沒(méi)必要去掌握全部API,只要會(huì)查文檔就可以。雖然新項(xiàng)目中不一定會(huì)使用 jQuery ,但是學(xué)習(xí) jQuery ,尤其是去閱讀 jQuery 源碼,理解其設(shè)計(jì)思想、設(shè)計(jì)模式,你將會(huì)頗有收獲。

2、jQuery DOM 操作設(shè)計(jì)思想

jQuery 的基本設(shè)計(jì)思想和主要用法,就是”選擇某個(gè)網(wǎng)頁(yè)元素,然后對(duì)其進(jìn)行某種操作”。使用 jQuery 的第一步,往往就是將一個(gè)選擇表達(dá)式,放進(jìn)構(gòu)造函數(shù) jQuery()(簡(jiǎn)寫(xiě)為),得到被選中的元素,選中的元素可能是一個(gè),也可能是多個(gè)。第二步就是對(duì)這些元素進(jìn)行一系列操作,例如添加class、移除class、取值和賦值、移動(dòng)等。 jQuery的一大特點(diǎn)就是支持鏈?zhǔn)讲僮?,即?lèi)似于這樣`('div').find('h3').eq(2).html('Hello');`,將一系列操作連接在一起。它的原理在于每一步的jQuery操作,返回的都是一個(gè)jQuery對(duì)象,所以不同操作可以連在一起。

3、自己實(shí)現(xiàn)一個(gè)簡(jiǎn)單的 jQuery

|

123456789101112131415161718192021222324252627282930313233

|

window.jQuery = function(nodeOrSelector) {  var nodes = {};  if (typeof nodeOrSelector === 'string') {    var nodeList = document.querySelectorAll(nodeOrSelector);    nodeList.forEach(function(item,index){      nodes[index] = item;    });    nodes.length = nodeList.length;  } else if (nodeOrSelector instanceof Node) {    nodes = {      '1': nodeOrSelector,      lenght: 1    };  }  nodes.addClass = function(classNames){    for (var i=0; i<nodes.length; i++) {      classNames.forEach(function(item){        nodes[i].classList.add(item);      });    }  };  nodes.setText = function(text) {    for (var i=0; i<nodes.length; i++) {      nodeList[i].innerHTML  = text;    }  };  return nodes;};// aliaswindow.$ = jQuery// 使用$('ul>li').addClass(['red','blue']);$('ul>li').setText('Hello jQuery');

|

以上是本人實(shí)現(xiàn)的一個(gè)簡(jiǎn)單的jQuery對(duì)象。該對(duì)象接收一個(gè)參數(shù),可以是一個(gè)已經(jīng)獲取到的DOM對(duì)象,也可以是一個(gè)選擇器字符串。jQuery方法返回的是一個(gè)自定義的節(jié)點(diǎn)對(duì)象,該對(duì)象上定義了addClass、setText等一系列操作方法。

4、jQuery獲取DOM和JS選擇器獲取的DOM的區(qū)別與聯(lián)系

例如:

|

1

|

<div id='x'></div>

|

|

12

|

var div = document.getElementById('x')var $div = $('#x')

|

  • div 是由原生API獲取的元素節(jié)點(diǎn)對(duì)象,
    div.__proto__ === HTMLDivElement.prototype
    div.__proto__.__proto__ === HTMLElement .prototype
  • div 是jQuery對(duì)象實(shí)例,它包含了從jQuery繼承過(guò)來(lái)的很多方法和屬性 `div.proto === jQuery.prototype$div.proto .proto === Object.prototype`
  • div 變成 div: `(div)`
  • div 變成 div: `div[0] === div`
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容