任何人都可以告訴我NodeList是什麼類型的對象。我讀到它是一個類似數組的對象,可以通過括號表示來訪問它,例如var a = someNode.childNode[0];
。這是如何實現的,因爲通過括號表示法,我們只能訪問對象的屬性,而且我知道我們不能有JavaScript中的NodeList對象
回答
NodeLists「live」,即當文檔結構發生變化時它們被更新,他們始終保持最新的最準確的信息。實際上,所有的NodeList對象都是在DOM訪問時針對DOM運行的查詢。
要遍歷一個節點列表任何時候,這是最好的初始化第二個變量與長度,然後迭代器比較變量:
var divs = document.getElementsByTagName("div");
for (var i=0, lens=divs.length; i < len; i++){
var div = document.createElement("div");
document.body.appendChild(div);
}
節點列表就像是結構的數組,但它實際上不是數組。您可以通過括號表示法訪問數組值。
NodeList不是一個核心的Javascript對象,它是由瀏覽器提供的DOM。考慮一個將接口返回給動態對象或活動對象的函數,因此forEach()不可用,但可以將其轉換爲真實數組,以使用例如
// turns nodelist into an array to enable forEach
function toArray(list) {
var i, array = [];
for (i=0; i<list.length;i++) {array[i] = list[i];}
return array;
}
詳情:http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-536297177
NodeList
是宿主對象和不受適用於本地JavaScript對象的一般規則。因此,您應該堅持爲其編寫的API,其中包含一個length
屬性,並通過方括號屬性訪問語法訪問其成員。您可以使用此API來創建一個包含Array
節點列表成員的快照:
var nodeList = document.getElementsByTagName("div");
var nodeArray = [];
for (var i = 0; i < nodeList.length; ++i) {
nodeArray[i] = nodeList[i];
}
JavaScript是像酒精,它可以迫使:
var links = document.getElementsByTagName('a');
Array.prototype.slice.call(links).forEach(function(anchor, index, arr) {
anchor.addEventListener('click', onClickFN, false);
});
一個NodeList
是DOM elements
集合。它就像一個數組(但它不是)。要使用它,你必須把它變成一個常規的JavaScript數組。以下代碼片段可以爲您完成工作。
const nodeList = document.getElementsByClassName('.yourClass'),
nodeArray = [].slice.call(nodeList);
節點列表通常作爲帶有過濾器的節點迭代器實現。這意味着獲得像長度一樣的屬性是O(n),並且通過重新檢查長度將在O(n^2)上遍歷列表。
var paragraphs = document.getElementsByTagName('p');
for (var i = 0; i < paragraphs.length; i++) {
doSomething(paragraphs[i]);
}
這是更好地做到這一點,而不是:
var paragraphs = document.getElementsByTagName('p');
for (var i = 0, paragraph; paragraph = paragraphs[i]; i++) {
doSomething(paragraph);
}
這對所有集合和數組,只要數組不包含被視爲布爾假的東西效果很好。
在迭代childNodes的情況下,您也可以使用firstChild和nextSibling屬性。現在
var parentNode = document.getElementById('foo');
for (var child = parentNode.firstChild; child; child = child.nextSibling) {
doSomething(child);
}
在ES2015,您可以利用它創建的任何類似數組的對象Array實例Array.from
方法,所以這應該工作:
const divList = Array.from(document.getElementsByTagName("div"));
欲瞭解更多信息:https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Array/from
對我很好。 Chrome,2016年10月。 – 2016-10-26 01:08:58
- 1. 在Javascript中獲取關於NodeList對象的文檔的位置?
- 2. Javascript Live Nodelist Loop
- 3. android parse xml - Nodelist有太多的對象
- 4. AttributeError:'NodeList'對象沒有屬性'getElementsByTagName'
- 5. 如何檢查對象是否是IE中NodeList的實例?
- 6. 添加函數到NodeList對象在Firefox中不起作用
- 7. 爲什麼JavaScript NodeList是不可變的?
- 8. 樣機的NodeList
- 9. javascript中的對象和對象文字
- 10. 對象內的Javascript對象
- 11. JavaScript對象的JSON對象
- 12. 在Python中解析XML和我的'NodeList'對象沒有屬性'len'
- 13. 中的對象的Javascript
- 14. 中的JavaScript的LiveCycle - 對象
- 15. 將類添加到JavaScript中的nodeList上點擊的按鈕
- 16. 的Javascript:對象
- 17. javascript中的對象標識
- 18. 枚舉javascript中的對象
- 19. Javascript中類的對象
- 20. Javascript中的對象聲明
- 21. javascript中的對象引用
- 22. javascript中的Date對象
- 23. Javascript中的對象參數
- 24. javascript中的對象形式
- 25. JavaScript ES6中的類對象?
- 26. JavaScript中的對象比較
- 27. 定位對象中的JavaScript
- 28. 在對象中排序對象,javascript
- 29. xPath,DOM和NodeList
- 30. 添加JavaScript對象到JavaScript對象
不錯的和整潔的問題:) – Mahi 2016-11-16 19:30:56