ForEach метод Node.childNodes?
После предоставления неверного ответа относительно свойства .item()
Node.childNodes
для вопроса, я проверил __proto__
возвращаемого элемента childNodes
элемента form
и нашел метод forEach
.
Метод forEach
Node.childNodes
не описан в спецификации NodeList
, в Methods
в MDN или Interface NodeList, и не кажется упомянутый в Итерировать NodeList, используя метод forEach или страницы, связанные с этим Вопросом; хотя он доступен в Chromium 50.
Доступен ли метод только в относительно недавних версиях Chrome/Chromium? Если да, то это документировано?
Есть ли какая-либо документация относительно метода forEach()
Node.childNodes
?
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>
Ответы
Ответ 1
DOM4 теперь определяет NodeList как итерируемый:
iterable<Node>;
Согласно проекту interface можно объявить итерабельным, используя итеративная декларация (сопоставление Iterable
) в теле интерфейса.
iterable<value-type>;
iterable<key-type, value-type>;
Объекты, реализующие интерфейс, объявленный как итерируемый поддержка повторяется для получения последовательности значений.
Примечание. В языковой привязке ECMAScript используется интерфейс, который iterable будет иметь "записи", "forEach", "keys", "values" и @@iterator свойства объект прототипа интерфейса.
Если задан параметр одного типа, то интерфейс имеет значение iterator и предоставляет значения указанного типа.
Ответ 2
Доступен ли метод только в относительно недавних версиях Chrome/Chromium? Если да, то это документировано?
Да, это новое в DOM4, поэтому оно не широко доступно.
Есть ли какая-либо документация относительно метода forEach() для Node.childNodes?
Смотрите Добавьте поддержку для [ArrayClass] и используйте ее в NodeList в трекере Chromium:
От https://bugs.webkit.org/show_bug.cgi?id=81573
http://dom.spec.whatwg.org/#interface-nodelist
DOM4 специфицирует NodeList как имеющий Array.prototype в своей цепочке прототипов.
Еще немного фона для этого. [ArrayClass] позволяет нам делать такие вещи, как document.querySelectorAll('. Foo'). ForEach и т.д. Патч на bugs.webkit.org имеет флаг времени выполнения, потому что неясно, будет ли это еще возможно.
Исторически эти объекты, подобные массиву, не включали эти методы из прототипа массива, что приводило к коду типа Array.prototype.forEach.call(nodeList, function() { ... })
. Теперь это предназначено для изменения в DOM4.