jQuery與原生JavaScript選擇HTML元素集合用法對比分析
本文實(shí)例講述了jQuery與原生JavaScript選擇HTML元素集合用法。分享給大家供大家參考,具體如下:
通過調(diào)用document.getElementsByTagName, document.getElementsByName以及document.getElementsByClassName(部分瀏覽器不支持),可以返回HTMLCollection對象。表面上,它們與數(shù)組很類似,因?yàn)樗鼈兌及琹ength屬性并且元素都可以通過[index]方式訪問。然而,實(shí)際上它們并不是數(shù)組;諸如push(), slice()與sort()之類的方法不受支持。
考慮下面的HTML文檔:
<body> <p>Paragraph 1</p> <p>Paragraph 2</p> <p>Paragraph 3</p> </body>
我們使用原生JavaScript的getElementsByTagName方法與jQuery選擇器分別獲取每一個(gè)paragraph節(jié)點(diǎn):
var pCollection = document.getElementsByTagName("p"); var pQuery = $("p"); console.log("pCollection.length: ", pCollection.length); console.log("pQuery.length: ", pQuery.length);
它們都返回了相同的節(jié)點(diǎn),因此集合長度都是3:
pCollection.length: 3
pQuery.length: 3
我們現(xiàn)在再向文檔中添加一個(gè)paragraph元素,然后再觀察一下集合:
// add new paragraph var newp = document.createElement("p"); newp.appendChild(document.createTextNode("Paragraph 4")); document.body.appendChild(newp); // // display length console.log("pCollection.length: ", pCollection.length); console.log("pQuery.length: ", pQuery.length);
運(yùn)行結(jié)果:
pCollection.length: 4
pQuery.length: 3
HTMLCollection對象是實(shí)時(shí)的(live)。它們會在相應(yīng)文檔發(fā)生變化時(shí)自動更新。jQuery與其他JavaScript庫也使用了諸如document.getElementsByTagName()之類的方法,但是將返回的節(jié)點(diǎn)拷貝到一個(gè)真正的數(shù)組里面。因此,查詢得到的結(jié)果反映的是文檔當(dāng)時(shí)的狀態(tài):而不會隨著文檔的變化自動更新。
兩種方法各有利弊。例如,下面的代碼會導(dǎo)致無限循環(huán),因?yàn)镠TMLCollection的長度會在<p>元素增加時(shí)自動+1:
var pCollection = document.getElementsByTagName("p"); for (var i = 0; i < pCollection.length; i++) { document.body.appendChild(pCollection[i].cloneNode(true)); }
有時(shí)候,相較于靜態(tài)的jQuery節(jié)點(diǎn)集合或者重復(fù)調(diào)用選擇器,使用速度更快、原生的實(shí)時(shí)HTMLCollection更合適。幸運(yùn)的是,我們可以在需要時(shí)方便地將任何集合傳遞給jQuery,例如:
var pCollection = document.getElementsByTagName("p"); // ... add nodes, do work, etc ... $(pCollection).addClass("myclass");
jQuery與其他庫可以減少開發(fā)工作量,但是,在可能的情況下,使用原生(plain old)JavaScript,可以避免額外的文件請求與處理開銷,從而寫出更加高效的代碼。
原文鏈接:http://www.sitepoint.com/javascript-vs-jquery-html-collections/
感興趣的朋友可以使用在線HTML/CSS/JavaScript代碼運(yùn)行工具:http://tools.jb51.net/code/HtmlJsRun測試上述代碼運(yùn)行效果。
更多關(guān)于JavaScript相關(guān)內(nèi)容可查看本站專題:《JavaScript操作DOM技巧總結(jié)》、《JavaScript頁面元素操作技巧總結(jié)》、《JavaScript事件相關(guān)操作與技巧大全》、《JavaScript查找算法技巧總結(jié)》、《JavaScript數(shù)據(jù)結(jié)構(gòu)與算法技巧總結(jié)》、《JavaScript遍歷算法與技巧總結(jié)》及《JavaScript錯(cuò)誤與調(diào)試技巧總結(jié)》
希望本文所述對大家JavaScript程序設(shè)計(jì)有所幫助。
- javascript與jquery動態(tài)創(chuàng)建html元素示例
- js jquery獲取當(dāng)前元素的兄弟級 上一個(gè) 下一個(gè)元素
- js與jquery獲取父元素,刪除子元素的兩種不同方法
- JavaScript和jquery獲取父級元素、子級元素、兄弟元素的方法
- js與jquery獲取父級元素,子級元素,兄弟元素的實(shí)現(xiàn)方法
- jQuery下實(shí)現(xiàn)等待指定元素加載完畢(可改成純js版)
- js jquery 獲取某一元素到瀏覽器頂端的距離實(shí)現(xiàn)方法
- JS加jquery簡單實(shí)現(xiàn)標(biāo)簽元素的顯示或隱藏
- JS Jquery 遍歷,篩選頁面元素 自動完成(實(shí)現(xiàn)代碼)
- jquery和javascript中如何將一元素的內(nèi)容賦給另一元素
- jQuery與javascript對照學(xué)習(xí) 獲取父子前后元素 實(shí)現(xiàn)代碼
- jQuery和JavaScript節(jié)點(diǎn)插入元素的方法對比
相關(guān)文章
JavaScript Window瀏覽器對象模型方法與屬性匯總
本文給大家匯總分享的是JavaScript Window瀏覽器對象模型方法與屬性,十分的細(xì)致全面,這里推薦給大家,有需要的小伙伴可以參考下。2015-04-04javascript中的類,繼承,構(gòu)造函數(shù)詳解
這篇文章主要為大家詳細(xì)介紹了javascript中的類,繼承,構(gòu)造函數(shù),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助2022-02-02js中document.getElementByid、document.all和document.layers區(qū)分介紹
document.getElementById 是公共標(biāo)準(zhǔn),被目前的所有主流瀏覽器支持,document.all只有IE支持,document.layers是Netscape 4.x專有的屬性2011-12-12利用JavaScript實(shí)現(xiàn)拖拽改變元素大小
本文主要介紹了JavaScript實(shí)現(xiàn)拖拽改變元素大小的原理及具體實(shí)例分析,具有很好的參考價(jià)值,需要的朋友一起來看下吧2016-12-12javascript 判斷一個(gè)對象為數(shù)組的方法
這篇文章主要介紹了javascript 判斷一個(gè)對象為數(shù)組的方法的相關(guān)資料,需要的朋友可以參考下2017-05-05javacript使用break內(nèi)層跳出外層循環(huán)分析
這篇文章主要介紹了javacript使用break內(nèi)層跳出外層循環(huán)的用法,以實(shí)例形式對比分析了循環(huán)跳出break語句的使用技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-01-01