метод forEach узла.childNodes?

после неправильный ответ о .item() собственность Node.childNodes для вопроса, я проверил __proto__ вернулся childNodes of a form элемент и нашел forEach метод.

на forEach метод Node.childNodes не задокументировано в спецификации NodeList, на Methods в MDN или Интерфейс 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@example.com">
  <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>

2 ответов


DOM4 теперь определяет узла как повторяемое:

iterable<Node>;

По словам проект IDL, что означает

An интерфейс может быть объявлен типа Iterable С помощью iterable объявление (проверка Iterable) в теле интерфейса.

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

объекты, реализующие интерфейс, объявленный быть итерируемым поддержка повторяется для получения последовательности значений.

Примечание: в привязке языка ECMAScript интерфейс, который iterable будет иметь "записи", "forEach", "ключи", "значения" и @@iterator свойства объект-прототип интерфейса.

Если один параметр типа, то интерфейс имеет значение итератор и предоставляет значения указанного типа.


доступен ли метод только в относительно последних версиях Chrome / Chromium? Если да, то задокументировано ли это?

Да, это новое в DOM4, поэтому не широко доступно.

есть ли какая-либо документация, касающаяся метода forEach() узла.childNodes?

посмотреть добавить поддержку [ArrayClass] и использовать это в NodeList на трекере ошибок Chromium:

от https://bugs.webkit.org/show_bug.cgi?id=81573

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

DOM4 спецификации NodeList как имеющие массив.прототип в своей цепочке прототипов.

еще немного фона для этого. [ArrayClass] позволяет нам делать такие вещи, как document.querySelectorAll('.фу').по каждому элементу и т. д. Заплатка на bugs.webkit.org имеет флаг времени выполнения, потому что неясно, будет ли это все еще возможно достигать.

исторически эти такие объекты не включает эти методы из прототипа массива, что приводит к код типа Array.prototype.forEach.call(nodeList, function() { ... }). Теперь это должно измениться в DOM4.