HTML

Living Standard — Last Updated 28 January 2023

    1. 2.6 Common DOM interfaces
      1. 2.6.1 Reflecting content attributes in IDL attributes
      2. 2.6.2 Collections
        1. 2.6.2.1 The HTMLAllCollection interface
          1. 2.6.2.1.1 [[Call]] ( thisArgument, argumentsList )
        2. 2.6.2.2 The HTMLFormControlsCollection interface
        3. 2.6.2.3 The HTMLOptionsCollection interface
      3. 2.6.3 The DOMStringList interface

2.6 Common DOM interfaces

2.6.1 Reflecting content attributes in IDL attributes

Some IDL attributes are defined to reflect a particular content attribute. This means that on getting, the IDL attribute returns the current value of the content attribute, and on setting, the IDL attribute changes the value of the content attribute to the given value.

In general, on getting, if the content attribute is not present, the IDL attribute must act as if the content attribute's value is the empty string; and on setting, if the content attribute is not present, it must first be added.

IDL attributes of type DOMString? that reflect enumerated content attributes can be limited to only known values. Per the processing models below, those will cause the getters for such IDL attributes to only return keywords for those enumerated attributes, or the empty string or null.

If a reflecting IDL attribute has the type

  • The getter steps are:

    1. If the content attribute is an enumerated attribute, and the IDL attribute is limited to only known values:

      1. If the content attribute is not in any state (e.g. the attribute is missing and there is no missing value default), or the content attribute is in a state with no associated keyword value, then return the empty string.

      2. Return the canonical keyword for the state of the content attribute.

    2. Otherwise:

      1. Return the content attribute's value.

  • The setter steps are to set the content attribute's value to the given value.

    If a reflecting IDL attribute has the type DOMString?:

    If a reflecting IDL attribute has the type

  • The getter steps are:

    1. If the content attribute is defined to contain a URL:

      1. If the content attribute is absent, then return the empty string.

      2. Parse the value of the content attribute relative to the element's node document.

      3. If that is successful, then return the resulting URL string.

      4. Otherwise, return the value of the content attribute, converted to a

        Otherwise:

        1. Return the value of the content attribute, converted to a

        2. The setter steps are to set the content attribute's value to the given value.

          If a reflecting IDL attribute is a boolean content attributes.)

          If a reflecting IDL attribute has a signed integer type (rules for parsing signed integers, and if that is successful, and the value is in the range of the IDL attribute's type, the resulting value must be returned. If, on the other hand, it fails or returns an out of range value, or if the attribute is absent, then the default value must be returned instead, or 0 if there is no default value. On setting, the given value must be converted to the shortest possible string representing the number as a valid integer and then that string must be used as the new content attribute value.

          If a reflecting IDL attribute has a signed integer type (limited to only non-negative numbers then, on getting, the content attribute must be parsed according to the rules for parsing non-negative integers, and if that is successful, and the value is in the range of the IDL attribute's type, the resulting value must be returned. If, on the other hand, it fails or returns an out of range value, or if the attribute is absent, the default value must be returned instead, or −1 if there is no default value. On setting, if the value is negative, the user agent must throw an "IndexSizeError" valid non-negative integer and then that string must be used as the new content attribute value.

          If a reflecting IDL attribute has an unsigned integer type () then, on getting, the content attribute must be parsed according to the rules for parsing non-negative integers, and if that is successful, and the value is in the range 0 to 2147483647 inclusive, the resulting value must be returned. If, on the other hand, it fails or returns an out of range value, or if the attribute is absent, the default value must be returned instead, or 0 if there is no default value. On setting, first, if the new value is in the range 0 to 2147483647, then let n be the new value, otherwise let n be the default value, or 0 if there is no default value; then, n must be converted to the shortest possible string representing the number as a valid non-negative integer and that string must be used as the new content attribute value.

          If a reflecting IDL attribute has an unsigned integer type () that is limited to only non-negative numbers greater than zero, then the behavior is similar to the previous case, but zero is not allowed. On getting, the content attribute must first be parsed according to the rules for parsing non-negative integers, and if that is successful, and the value is in the range 1 to 2147483647 inclusive, the resulting value must be returned. If, on the other hand, it fails or returns an out of range value, or if the attribute is absent, the default value must be returned instead, or 1 if there is no default value. On setting, if the value is zero, the user agent must throw an "IndexSizeError" n be the new value, otherwise let n be the default value, or 1 if there is no default value; then, n must be converted to the shortest possible string representing the number as a valid non-negative integer and that string must be used as the new content attribute value.

          If a reflecting IDL attribute has an unsigned integer type () that is limited to only non-negative numbers greater than zero with fallback, then the behavior is similar to the previous case, but disallowed values are converted to the default value. On getting, the content attribute must first be parsed according to the rules for parsing non-negative integers, and if that is successful, and the value is in the range 1 to 2147483647 inclusive, the resulting value must be returned. If, on the other hand, it fails or returns an out of range value, or if the attribute is absent, the default value must be returned instead. On setting, first, if the new value is in the range 1 to 2147483647, then let n be the new value, otherwise let n be the default value; then, n must be converted to the shortest possible string representing the number as a valid non-negative integer and that string must be used as the new content attribute value.

          If a reflecting IDL attribute has an unsigned integer type () that is clamped to the range [min, max], then on getting, the content attribute must first be parsed according to the rules for parsing non-negative integers, and if that is successful, and the value is between min and max inclusive, the resulting value must be returned. If it fails, the default value must be returned. If it succeeds but the value is less than min, min must be returned. If it succeeds but the value is greater than max, max must be returned. On setting, it behaves the same as setting a regular reflected unsigned integer.

          If a reflecting IDL attribute has a floating-point number type (), then, on getting, the content attribute must be parsed according to the rules for parsing floating-point number values, and if that is successful, the resulting value must be returned. If, on the other hand, it fails, or if the attribute is absent, the default value must be returned instead, or 0.0 if there is no default value. On setting, the given value must be converted to the best representation of the number as a floating-point number and then that string must be used as the new content attribute value.

          If a reflecting IDL attribute has a floating-point number type () that is limited to numbers greater than zero, then the behavior is similar to the previous case, but zero and negative values are not allowed. On getting, the content attribute must be parsed according to the rules for parsing floating-point number values, and if that is successful and the value is greater than 0.0, the resulting value must be returned. If, on the other hand, it fails or returns an out of range value, or if the attribute is absent, the default value must be returned instead, or 0.0 if there is no default value. On setting, if the value is less than or equal to zero, then the value must be ignored. Otherwise, the given value must be converted to the best representation of the number as a floating-point number and then that string must be used as the new content attribute value.

          The values Infinity and Not-a-Number (NaN) values throw an exception on setting, as defined in Web IDL. [WEBIDL]

          If a reflecting IDL attribute has the type

          If a reflecting IDL attribute attr has the type T?, where T is either

        3. Elements of the type this IDL attribute appears on have an explicitly set attr-element, which is a weak reference to an element or null. It is initially null.

        4. Elements of the type this IDL attribute appears on have an attr-associated element. To compute the attr-associated element for such an element element:

          1. If element's explicitly set attr-element is not null:

          2. Otherwise, if the content attribute is present on element, then return the first element candidate, in tree order, that meets the following criteria:

            • candidate's root is the same as element's root,
            • candidate's ID is the value of the content attribute, and
            • candidate implements T.

            If no such element exists, then return null.

          3. Return null.

          Other parts of this specification, or other specifications using attribute reflection, are expected to consult an element's attr-associated element. An element's explicitly set attr-element is an internal implementation detail of its attr-associated element and is not to be used directly.

        5. The getter steps are to return this's attr-associated element.

        6. The setter steps are:

          1. If the given value is null, then:

            1. Set this's explicitly set attr-element to null.

            2. Remove the content attribute from this.

            3. Return.

          2. Set the content attribute's value for this to the empty string.

          3. Set this's explicitly set attr-element to a weak reference to the given value.

        7. The following attribute change steps, given element, localName, oldValue, value, and namespace, are used to synchronize between the content attribute and the IDL attribute:

          1. If localName is not the content attribute's local name, or namespace is not null, then return.

          2. Set element's explicitly set attr-element to null.

          If a reflecting IDL attribute attr has the type FrozenArray<T>?, where T is either

          2.6.2 Collections

          The HTMLFormControlsCollection and HTMLOptionsCollection interfaces are collections derived from the HTMLAllCollection interface is a collection, but is not so derived.

          2.6.2.1 The HTMLAllCollection interface

          The HTMLAllCollection interface is used for the legacy document.all attribute. It operates similarly to

          All HTMLAllCollection objects are rooted at a Document and have a filter that matches all elements, so the elements represented by the collection of an HTMLAllCollection object consist of all the descendant elements of the root Document.

          Objects that implement the HTMLAllCollection interface are legacy platform objects with an additional [[Call]] internal method described in the section below. They also have an [[IsHTMLDDA]] internal slot.

          Objects that implement the HTMLAllCollection interface have several unusual behaviors, due of the fact that they have an [[IsHTMLDDA]] internal slot:

          • The ToBoolean abstract operation in JavaScript returns false when given objects implementing the HTMLAllCollection interface.

          • The IsLooselyEqual abstract operation, when given objects implementing the HTMLAllCollection interface, returns true when compared to the undefined and null values. (Comparisons using the IsStrictlyEqual abstract operation, and IsLooselyEqual comparisons to other values such as strings or objects, are unaffected.)

          • The typeof operator in JavaScript returns the string "undefined" when applied to objects implementing the HTMLAllCollection interface.

          These special behaviors are motivated by a desire for compatibility with two classes of legacy content: one that uses the presence of document.all as a way to detect legacy user agents, and one that only supports those legacy user agents and uses the document.all object without testing for its presence first. [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);
          
            // Note: HTMLAllCollection objects have a custom [[Call]] internal method and an [[IsHTMLDDA]] internal slot.
          };

          The object's supported property indices are as defined for

          The supported property names consist of the non-empty values of all the id attributes of all the elements represented by the collection, and the non-empty values of all the name attributes of all the "all"-named elements represented by the collection, in tree order, ignoring later duplicates, with the id of an element preceding its name if it contributes both, they differ from each other, and neither is the duplicate of an earlier entry.

          The length getter steps are to return the number of nodes represented by the collection.

          The indexed property getter must return the result of getting the "all"-indexed element from this given the passed index.

          The namedItem(name) method steps are to return the result of getting the "all"-named element(s) from this given name.

          The item(nameOrIndex) method steps are:

          1. If nameOrIndex was not provided, return null.

          2. Return the result of getting the "all"-indexed or named element(s) from this, given nameOrIndex.


          The following elements are "all"-named elements: a, button, embed, form, frame, frameset, iframe, img, input, map, meta, object, select, and textarea

          To get the "all"-indexed element from an HTMLAllCollection collection given an index index, return the indexth element in collection, or null if there is no such indexth element.

          To get the "all"-named element(s) from an HTMLAllCollection collection given a name name, perform the following steps:

          1. If name is the empty string, return null.

          2. Let subCollection be an Document as collection, whose filter matches only elements that are either:

          3. If there is exactly one element in subCollection, then return that element.

          4. Otherwise, if subCollection is empty, return null.

          5. Otherwise, return subCollection.

          To get the "all"-indexed or named element(s) from an HTMLAllCollection collection given nameOrIndex:

          1. If nameOrIndex, converted to a JavaScript String value, is an array index property name, return the result of getting the "all"-indexed element from collection given the number represented by nameOrIndex.

          2. Return the result of getting the "all"-named element(s) from collection given nameOrIndex.

          2.6.2.1.1 [[Call]] ( thisArgument, argumentsList )
          1. If argumentsList's size is zero, or if argumentsList[0] is undefined, return null.

          2. Let nameOrIndex be the result of converting argumentsList[0] to a result be the result of getting the "all"-indexed or named element(s) from this HTMLAllCollection given nameOrIndex.

          3. Return the result of converting result to an ECMAScript value.

          The thisArgument is ignored, and thus code such as Function.prototype.call.call(document.all, null, "x") will still search for elements. (document.all.call does not exist, since document.all does not inherit from Function.prototype.)

          2.6.2.2 The HTMLFormControlsCollection interface

          The HTMLFormControlsCollection interface is used for collections of listed elements in form elements.

          HTMLFormControlsCollection

          Support in all current engines.

          Firefox1+Safari4+Chrome1+
          Opera12.1+Edge79+
          Edge (Legacy)12+Internet ExplorerNo
          Firefox Android?Safari iOS1+Chrome Android?WebView Android?Samsung Internet?Opera Android12.1+

          RadioNodeList

          Support in all current engines.

          Firefox33+Safari7+Chrome21+
          Opera?Edge79+
          Edge (Legacy)12+Internet Explorer9+
          Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android?
          [Exposed=Window]
          interface HTMLFormControlsCollection : HTMLCollection {
            // inherits length and item()
            getter (RadioNodeList or Element)? namedItem(DOMString name); // shadows inherited namedItem()
          };
          
          [Exposed=Window]
          interface RadioNodeList : NodeList {
            attribute DOMString value;
          };
          collection.length

          Returns the number of elements in collection.

          element = collection.item(index)
          element = collection[index]

          Returns the item at index index in collection. The items are sorted in tree order.

          element = collection.namedItem(name)

          HTMLFormControlsCollection/namedItem

          Support in all current engines.

          Firefox33+Safari4+Chrome1+
          Opera12.1+Edge79+
          Edge (Legacy)12+Internet ExplorerNo
          Firefox Android?Safari iOS1+Chrome Android?WebView Android?Samsung Internet?Opera Android12.1+
          radioNodeList = collection.namedItem(name)
          element = collection[name]
          radioNodeList = collection[name]

          Returns the item with ID or name name from collection.

          If there are multiple matching items, then a RadioNodeList object containing all those elements is returned.

          radioNodeList.value

          Returns the value of the first checked radio button represented by radioNodeList.

          radioNodeList.value = value

          Checks the first first radio button represented by radioNodeList that has value value.

          The object's supported property indices are as defined for

          The supported property names consist of the non-empty values of all the id and name attributes of all the elements represented by the collection, in tree order, ignoring later duplicates, with the id of an element preceding its name if it contributes both, they differ from each other, and neither is the duplicate of an earlier entry.

          The namedItem(name) method must act according to the following algorithm:

          1. If name is the empty string, return null and stop the algorithm.
          2. If, at the time the method is called, there is exactly one node in the collection that has either an id attribute or a name attribute equal to name, then return that node and stop the algorithm.
          3. Otherwise, if there are no nodes in the collection that have either an id attribute or a name attribute equal to name, then return null and stop the algorithm.
          4. Otherwise, create a new RadioNodeList object representing a live view of the HTMLFormControlsCollection object, further filtered so that the only nodes in the RadioNodeList object are those that have either an id attribute or a name attribute equal to name. The nodes in the RadioNodeList object must be sorted in tree order.
          5. Return that RadioNodeList object.

          Members of the RadioNodeList interface inherited from the

          RadioNodeList/value

          Support in all current engines.

          Firefox33+Safari7+Chrome21+
          Opera?Edge79+
          Edge (Legacy)12+Internet Explorer9+
          Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android?

          The value IDL attribute on the RadioNodeList object, on getting, must return the value returned by running the following steps:

          1. Let element be the first element in tree order represented by the RadioNodeList object that is an input element whose type attribute is in the Radio Button state and whose checkedness is true. Otherwise, let it be null.

          2. If element is null, return the empty string.

          3. If element is an element with no value attribute, return the string "on".

          4. Otherwise, return the value of element's value attribute.

          On setting, the value IDL attribute must run the following steps:

          1. If the new value is the string "on": let element be the first element in tree order represented by the RadioNodeList object that is an input element whose type attribute is in the Radio Button state and whose value content attribute is either absent, or present and equal to the new value, if any. If no such element exists, then instead let element be null.

            Otherwise: let element be the first element in tree order represented by the RadioNodeList object that is an input element whose type attribute is in the Radio Button state and whose value content attribute is present and equal to the new value, if any. If no such element exists, then instead let element be null.

          2. If element is not null, then set its checkedness to true.

          2.6.2.3 The HTMLOptionsCollection interface

          HTMLOptionsCollection

          Support in all current engines.

          Firefox1+Safari3+Chrome1+
          Opera12.1+Edge79+
          Edge (Legacy)12+Internet Explorer6+
          Firefox Android?Safari iOS1+Chrome Android?WebView Android37+Samsung Internet?Opera Android12.1+

          The HTMLOptionsCollection interface is used for collections of option elements. It is always rooted on a select element and has attributes and methods that manipulate that element's descendants.

          [Exposed=Window]
          interface HTMLOptionsCollection : HTMLCollection {
            // inherits item(), namedItem()
            [CEReactions] attribute unsigned long length; // shadows inherited length
            [CEReactions] setter undefined (unsigned long index, HTMLOptionElement? option);
            [CEReactions] undefined add((HTMLOptionElement or HTMLOptGroupElement) element, optional (HTMLElement or long)? before = null);
            [CEReactions] undefined remove(long index);
            attribute long selectedIndex;
          };
          collection.length

          Returns the number of elements in collection.

          collection.length = value

          When set to a smaller number than the existing length, truncates the number of option elements in the container corresponding to collection.

          When set to a greater number than the existing length, if that number is less than or equal to 100000, adds new blank option elements to the container corresponding to collection.

          element = collection.item(index)
          element = collection[index]

          Returns the item at index index in collection. The items are sorted in tree order.

          collection[index] = element

          When index is a greater number than the number of items in collection, adds new blank option elements in the corresponding container.

          When set to null, removes the item at index index from collection.

          When set to an option element, adds or replaces it at index index in collection.

          element = collection.namedItem(name)
          element = collection[name]

          Returns the item with ID or name name from collection.

          If there are multiple matching items, then the first is returned.

          collection.add(element[, before])

          Inserts element before the node given by before.

          The before argument can be a number, in which case element is inserted before the item with that number, or an element from collection, in which case element is inserted before that element.

          If before is omitted, null, or a number out of range, then element will be added at the end of the list.

          Throws a "HierarchyRequestError" element is an ancestor of the element into which it is to be inserted.

          collection.remove(index)

          Removes the item with index index from collection.

          collection.selectedIndex

          Returns the index of the first selected item, if any, or −1 if there is no selected item.

          collection.selectedIndex = index

          Changes the selection to the option element at index index in collection.

          The object's supported property indices are as defined for

          The length getter steps are to return the number of nodes represented by the collection.

          The length setter steps are:

          1. Let current be the number of nodes represented by the collection.

          2. If the given value is greater than current, then:

            1. If the given value is greater than 100,000, then return.

            2. Let n be valuecurrent.

            3. Append n new option elements with no attributes and no child nodes to the select element on which this is rooted. Mutation events must be fired as if a option elements had been inserted.

          3. If the given value is less than current, then:

            1. Let n be currentvalue.

            2. Remove the last n nodes in the collection from their parent nodes.

          Setting length never removes or adds any optgroup elements, and never adds new children to existing optgroup elements (though it can remove children from them).

          The supported property names consist of the non-empty values of all the id and name attributes of all the elements represented by the collection, in tree order, ignoring later duplicates, with the id of an element preceding its name if it contributes both, they differ from each other, and neither is the duplicate of an earlier entry.

          When the user agent is to set the value of a new indexed property or set the value of an existing indexed property for a given property index index to a new value value, it must run the following algorithm:

          1. If value is null, invoke the steps for the remove method with index as the argument, and return.

          2. Let length be the number of nodes represented by the collection.

          3. Let n be index minus length.

          4. If n is greater than zero, then append a n-1 new option elements with no attributes and no child nodes to the select element on which the HTMLOptionsCollection is rooted.

          5. If n is greater than or equal to zero, append value to the select element. Otherwise, replace the indexth element in the collection by value.

          The add(element, before) method must act according to the following algorithm:

          1. If element is an ancestor of the select element on which the HTMLOptionsCollection is rooted, then throw a "HierarchyRequestError" before is an element, but that element isn't a descendant of the select element on which the HTMLOptionsCollection is rooted, then throw a "NotFoundError" element and before are the same element, then return.

          2. If before is a node, then let reference be that node. Otherwise, if before is an integer, and there is a beforeth node in the collection, let reference be that node. Otherwise, let reference be null.

          3. If reference is not null, let parent be the parent node of reference. Otherwise, let parent be the select element on which the HTMLOptionsCollection is rooted.

          4. Pre-insert element into parent node before reference.

          The remove(index) method must act according to the following algorithm:

          1. If the number of nodes represented by the collection is zero, return.

          2. If index is not a number greater than or equal to 0 and less than the number of nodes represented by the collection, return.

          3. Let element be the indexth element in the collection.

          4. Remove element from its parent node.

          The selectedIndex IDL attribute must act like the identically named attribute on the select element on which the HTMLOptionsCollection is rooted

          2.6.3 The DOMStringList interface

          DOMStringList

          Support in all current engines.

          Firefox1+Safari5.1+Chrome1+
          Opera12.1+Edge79+
          Edge (Legacy)12+Internet Explorer10+
          Firefox Android?Safari iOS?Chrome Android?WebView Android3+Samsung Internet?Opera Android12.1+

          The DOMStringList interface is a non-fashionable retro way of representing a list of strings.

          [Exposed=(Window,Worker)]
          interface DOMStringList {
            readonly attribute unsigned long length;
            getter DOMString? item(unsigned long index);
            boolean contains(DOMString string);
          };

          New APIs must use sequence<DOMString> or equivalent rather than DOMStringList.

          strings.length

          Returns the number of strings in strings.

          strings[index]
          strings.item(index)

          Returns the string with index index from strings.

          strings.contains(string)

          Returns true if strings contains string, and false otherwise.

          Each DOMStringList object has an associated list.

          The DOMStringList interface supports indexed properties. The supported property indices are the indices of this's associated list.

          The length getter steps are to return this's associated list's size.

          The item(index) method steps are to return the indexth item in this's associated list, or null if index plus one is greater than this's associated list's size.

          The contains(string) method steps are to return true if this's associated list contains string, and false otherwise.