2010-09-23 61 views

回答

2

通過遍歷元素,並檢查它是否匹配。

通用代碼,用於查找其父代childNodes集合中元素的索引。

function index(el) { 
    var children = el.parentNode.childNodes, 
     i = 0; 
    for (; i < children.length; i++) { 
     if (children[i] == el) { 
      return i; 
     } 
    } 
    return -1; 
} 

用法:

// should return 4 
var idx = index(document.body.childNodes[4]); 
+1

是有一個設計原因節點列表不具有的indexOf操作? – amwinter 2012-12-20 17:09:41

+2

如果您使用[ES6](https://developer.mozilla.org/en-US/),請使用Array.prototype.indexOf.call(NodeList,element) – anandaravindan 2015-11-20 22:30:28

8

節點列表客體是Array狀物體。所以可以將它「轉換」爲一個數組。

也許它可以成爲你的解決方案。

var arr = Array.prototype.slice.call(yourNodeListObject); // Now it's an Array. 
arr.indexOf(element); // The index of your element :) 
+0

或'let arr = Array.from(yourNodeListObject)'文檔/網絡/的JavaScript /參考/ Global_Objects /陣列/從)。 – boris 2017-12-13 23:33:24

29

您可以使用Array.prototype.indexOf.call()這樣

let nodes = document.getElementsByTagName('*'); 
Array.prototype.indexOf.call(nodes, document.body); 
+0

救了我。謝謝! – 2015-11-12 09:46:43