HTML | Интерфейс HTMLAllCollection

HTML | Интерфейс HTMLAllCollection

Интерфейс HTMLAllCollection используется для устаревшего атрибута document.all. Он работает аналогично HTMLCollection; основные отличия заключаются в том, что он допускает ошеломляющее разнообразие различных (ab) применений своих методов, чтобы все в конечном итоге что-то возвращали, и что его можно вызывать как функцию в качестве альтернативы доступу к свойствам.

Примечание

Все объекты HTMLAllCollection укоренены в документе Document и имеют фильтр, который соответствует всем элементам, поэтому элементы, представленные коллекцией объекта HTMLAllCollection, состоят из всех элементов-потомков корневого документа.

Объекты, реализующие интерфейс HTMLAllCollection, являются устаревшими объектами платформы с дополнительным внутренним методом [[Call]], описанным в разделе ниже. У них также есть внутренний слот [[IsHTMLDDA]].

Примечание

Объекты, реализующие интерфейс HTMLAllCollection, ведут себя несколько необычно из-за того, что у них есть внутренний слот [[IsHTMLDDA]]:

  • Абстрактная операция приведения к логическому типу ToBoolean в JavaScript возвращает false, если заданы объекты, реализующие интерфейс HTMLAllCollection.
  • Алгоритм Сравнения Абстрактного Равенства при заданных объектах, реализующих интерфейс HTMLAllCollection, возвращает значение true при сравнении с undefined и null значениями. (Сравнения с использованием алгоритма Сравнения Строгого Равенства и сравнения Абстрактного Равенства с другими значениями, такими как строки или объекты, не затрагиваются.)
  • Оператор typeof в JavaScript возвращает строку «undefined» при применении к объектам, реализующим интерфейс HTMLAllCollection.

Это особое поведение мотивировано стремлением к совместимости с двумя классами устаревшего контента: один использует наличие document.all как способ обнаружения устаревших пользовательских агентов, а другой поддерживает только эти устаревшие пользовательские агенты и использует document.all. объекта без предварительной проверки на его наличие. [JAVASCRIPT]

 

[Exposed=Window,
LegacyUnenumerableNamedProperties]
interface HTMLAllCollection {
  readonly attribute unsigned long length;
  getter Element (unsigned long index);
  getter (HTMLCollection or Element)? namedItem(DOMString name);
  (HTMLCollection or Element)? item(optional DOMString nameOrIndex);

  // Примечание: Объекты HTMLAllCollection имеют собственный внутренний метод [[Call]] и внутренний слот [[IsHTMLDDA]].
};

 

Поддерживаемые индексы свойств объекта определены для объектов HTMLCollection.

Имена поддерживаемых свойств состоят из непустых значений всех атрибутов id всех элементов, представленных коллекцией, и непустых значений всех атрибутов name всех элементов с именами «все», представленных коллекцией, в древовидном порядке, игнорируя более поздние дубликаты, с идентификатором id элемента, предшествующим его имени name, если он вносит оба вклада, они отличаются друг от друга, и ни один из них не является дубликатом более ранней записи.

Шаги получателя длины length должны возвращать количество узлов, представленных коллекцией.

Получатель индексированного свойства должен возвращать результат получения элемента с индексом «all» из этого объекта контекста (this) с учетом переданного индекса.

Шаги метода namedItem(name) должны вернуть результат получения элемента(ов) с именем «all» из этого объекта контекста (this) заданного имени name.

Шаги метода item(nameOrIndex):

1. Если nameOrIndex не был указан, верните null.
2. Возвращает результат получения "all" индексированных или именованных элементов из этого объекта контекста (this), заданного nameOrIndex.

Следующие элементы являются элементами с именами «все» («all»-named elements): a, button, embed, form, frame, frameset, iframe, img, input, map, meta, object, select и textarea.

Чтобы получить элемент с индексом «все» (get the «all»-indexed element) из коллекции HTMLAllCollection collection с заданным индексом index, верните индексный элемент index в коллекции collection или значение null, если такого индексного элемента index нет.

Чтобы получить элемент (элементы) с именем «все» (get the «all»-named element(s)) из коллекции HTMLAllCollection collection с заданным именем name, выполните следующие действия:

1. Если name - пустая строка, вернуть null.
2. Пусть subCollection будет объектом HTMLCollection, корнем которого является тот же Document, что и коллекция collection, чей фильтр соответствует только элементам, которые:
  элементы с именем «все», с атрибутом name, равным name, или,
  элементы с идентификатором, равным имени name.
3. Если в subCollection есть ровно один элемент, верните этот элемент.
4. В противном случае, если subCollection пуста, вернуть null.
5. В противном случае вернуть subCollection.

 

Чтобы получить «все» индексированные или именованные элементы (get the «all»-indexed or named element(s)) из коллекции HTMLAllCollection collection с заданным nameOrIndex:

1. Если nameOrIndex, преобразованное в значение строки JavaScript, является именем свойства индекса массива, вернуть результат получения элемента с индексом «все» из коллекции collection с учетом числа, представленного nameOrIndex.
2. Вернуть результат получения элемента(ов) с именем "все" из коллекции collection с заданным nameOrIndex.

 

[[Call]] ( thisArgument, argumentsList )

1. Если размер argumentsList равен нулю, или если argumentsList[0] не определен - является undefined, вернуть значение null.
2. Пусть nameOrIndex будет результатом преобразования argumentsList[0] в DOMString.
3. Пусть result будет результатом получения "всех" индексированных или именованных элементов из этой HTMLAllCollection с заданным nameOrIndex.
4. Вернуть результат преобразования result в значение ECMAScript.
Примечание

thisArgument игнорируется, поэтому такой код, как Function.prototype.call.call(document.all, null, «x»), по-прежнему будет искать элементы. (document.all.call не существует, так как document.all не наследуется от Function.prototype.)

 

 

 

Информационные ссылки

Стандарт HTML — Раздел «2.6.2.1 The HTMLAllCollection interface» — https://html.spec.whatwg.org/multipage/common-dom-interfaces.html#the-htmlallcollection-interface