2012-10-19 35 views
5

Dự phòng không liên quan. Không có thư viện, xin vui lòng.js tìm đối tượng trong nodeList?

Chúng tôi có tham chiếu đối tượng dom, chúng tôi sẽ gọi obj. Nó thực sự là một event.target.

Chúng tôi có một danh sách nút, chúng tôi sẽ gọi nodes, mà chúng tôi đã nhận được với querySelectorAll và một bộ chọn biến.

nodes có thể có 1 hoặc nhiều thành phần và mỗi phần tử trong số đó có thể có con.

Chúng tôi cần xác định xem obj là một trong những phần tử nút đó hay phần tử con của các phần tử nút đó. Chúng tôi đang tìm kiếm chức năng trình duyệt "bản xứ" ở đây, chúng tôi có thể viết các vòng lặp for của riêng mình và thực hiện việc này, chúng tôi đang tìm kiếm các giải pháp thay thế.

Cái gì như:

nodes.contains(obj) HOẶC nodes.indexof(obj)

Giải pháp liên quan đến các phương pháp khác lấy danh sách nút để phù hợp chống lại được chấp nhận, nhưng tôi không có ý tưởng gì những có thể.

Trả lời

1

Tôi không nghĩ rằng có phương pháp DOM tích hợp cho điều đó. Bạn cần phải đệ quy đi qua số NodeList và kiểm tra sự bình đẳng với phần tử của bạn. Một tùy chọn khác là sử dụng Element.querySelectorAll trên mỗi phần tử cấp đầu tiên từ số NodeList của bạn (ví dụ: tìm id của phần tử của bạn). Tôi không chắc chắn như thế nào (trọ) hiệu quả đó sẽ được, mặc dù.

+0

Vâng đây cũng là trường tư duy hiện tại của chúng tôi. Vâng, loại ... obj là từ một event.target, vì vậy chúng tôi sẽ recurs thông qua các bậc cha mẹ, và phù hợp với bộ chọn biến của chúng tôi bằng cách sử dụng matchesSelector. Chúng tôi đã không thể tìm thấy một phương pháp được xây dựng trong là tốt, nhưng muốn chọn một số tâm trí tuyệt vời để xem nếu chúng ta đã bỏ lỡ. –

8

Tôi không chắc chắn nếu điều này sẽ tìm kiếm vượt quá mức đầu tiên của NodeList, nhưng bạn có thể sử dụng biểu thức này đệ quy để đi qua nó và kiểm tra xem phần tử 'obj' có nằm trong nút NodeList không.

[].indexOf.call(nodes, obj) 
+0

Điều này là đủ tốt cho các danh sách nút phẳng – doABarrelRoll721

1

tôi đã làm một cái gì đó như thế này:

Array.prototype.find.call(style.childNodes, function(child) { 
    if(child.textContent.includes(drawer.id)) { 
    console.log(child); 
    } 
}); 

vẻ để làm việc. Sau đó, con là một nút html khác, mà bạn có thể thao tác theo cách bạn muốn.

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