2010-09-23 34 views

Trả lời

2

Bằng cách lặp qua các phần tử và kiểm tra xem nó có khớp không.

Mã chung tìm thấy chỉ mục của phần tử trong bộ sưu tập của cha mẹ đó là childNodes.

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

Cách sử dụng:

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

là có một lý do thiết kế NodeList không có một hoạt động indexOf? – amwinter

+2

sử dụng Array.prototype.indexOf.call (NodeList, phần tử) – anandaravindan

8

Các Objet NodeList là một đối tượng Array-như thế nào. Vì vậy, nó có thể "chuyển đổi" nó thành một mảng.

Có thể đó là giải pháp cho bạn.

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

hoặc 'let arr = Array.from (yourNodeListObject)' nếu bạn đang sử dụng [ES6] (https://developer.mozilla.org/en-US/ tài liệu/Web/JavaScript/Tham chiếu/Global_Objects/Array/from). – boris

29

Bạn có thể sử dụng Array.prototype.indexOf.call() như thế này

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

Đã lưu tôi. Cảm ơn! –

Các vấn đề liên quan