2016-03-19 17 views
12

Sau khi cung cấp an incorrect answer liên quan đến tài sản của .item()Node.childNodes cho một câu hỏi, tôi kiểm tra __proto__ của trở childNodes của một yếu tố form và tìm thấy một phương pháp forEach.forEach phương pháp của Node.childNodes?

Phương pháp forEach của Node.childNodes không được ghi lại trong đặc điểm kỹ thuật của NodeList, in Methods at MDN, hoặc Interface NodeList, và không xuất hiện để được đề cập trong Iterate a NodeList using forEach method hoặc các trang liên quan đến câu hỏi đó; mặc dù nó xuất hiện trong Chromium 50.

Phương pháp này chỉ có sẵn ở các phiên bản Chrome/Chromium tương đối gần đây? Nếu có, tài liệu này có được không?

Có tài liệu nào liên quan đến phương thức forEach() của Node.childNodes không?


document.querySelector("form").addEventListener("submit", function(e) { 
 
    e.preventDefault(); 
 
    var form = e.target; 
 
    form.childNodes.forEach(function(el) { 
 
    if (el.tagName === "INPUT" && el.type !== "submit") 
 
     snippet.log("name:" + el.name + ", value:" + el.value) 
 
    }); 
 
});
<form> 
 
    <input type="text" name="firstName" value="The first name"> 
 
    <input type="text" name="lastName" value="The last name"> 
 
    <input type="email" name="emailAddress" value="[email protected]"> 
 
    <br> 
 
    <input type="submit" value="Submit"> 
 
</form> 
 
<!-- Script provides the `snippet` object, see http://meta.stackexchange.com/a/242144/134069 --> 
 
<script src="//tjcrowder.github.io/simple-snippets-console/snippet.js"></script>

Trả lời

9

DOM4 nay định nghĩa NodeList như một iterable:

iterable<Node>; 

Theo IDL draft, có nghĩa là

Một interface có thể được tuyên bố là iterable bằng cách sử dụng một iterable khai (phù hợp với Iterable) trong cơ thể của giao diện.

iterable<value-type>; 
iterable<key-type, value-type>; 

Đối tượng triển khai giao diện được lặp lại để nhận được chuỗi giá trị.

Note: Trong ngôn ngữ ECMAScript ràng buộc, một giao diện đó là iterable sẽ có “mục”, “foreach”, “chìa khóa”, “giá trị” và @@iterator tài sản trên interface prototype object của nó.

Nếu một tham số kiểu đơn được đưa ra, sau đó giao diện có một giá trị iterator và cung cấp giá trị của các loại quy định.

5

Phương pháp này chỉ có sẵn ở các phiên bản Chrome/Chromium gần đây không? Nếu có, tài liệu này có được không?

Có, đây là tính năng mới trong DOM4, vì vậy không có sẵn rộng rãi.

Có tài liệu nào liên quan đến phương thức forEach() của Node.childNodes không?

Xem Add support for [ArrayClass] and use that on NodeList trên bug tracker Chromium:

Từ https://bugs.webkit.org/show_bug.cgi?id=81573

http://dom.spec.whatwg.org/#interface-nodelist

DOM4 số kỹ thuật NodeList là có Array.prototype trong chuỗi nguyên mẫu của nó.

Một số nền khác cho nền tảng này. [ArrayClass] cho phép chúng ta làm những việc như document.querySelectorAll ('. Foo'). ForEach vv. Bản vá tại bugs.webkit.org có một cờ chạy vì nó không rõ ràng nếu điều này vẫn có thể đạt được.

Trước đây, các đối tượng giống mảng này không bao gồm các phương pháp này từ nguyên mẫu mảng, dẫn đến mã như Array.prototype.forEach.call(nodeList, function() { ... }). Điều này bây giờ có nghĩa là để thay đổi trong DOM4.

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