For HTML documents, and for HTML elements in HTML documents, certain APIs defined in DOM Core become case-insensitive or case-changing, as sometimes defined in DOM Core, and as summarized below. [DOMCORE]
This does not apply to XML documents or to elements that are not in the HTML namespace despite being in HTML documents.
Element.tagName
and Node.nodeName
These attributes return element names converted to ASCII uppercase, regardless of the case with which they were created.
Document.createElement()
The canonical form of HTML markup is all-lowercase; thus, this method will lowercase the argument before creating the requisite element. .
This doesn't apply to Document.createElementNS()
. Thus, it is possible,
by passing this last method a tag name in the wrong case, to
create an element that appears to have the same tag name as that
of an element defined in this specification when its tagName
attribute is examined, but that
doesn't support the corresponding interfaces. The "real" element
name (unaffected by case conversions) can be obtained from the
localName
attribute.
Element.setAttribute()
Element.setAttributeNode()
Attribute names are converted to ASCII lowercase.
This doesn't apply to Element.setAttributeNS()
and Element.setAttributeNodeNS()
.
Element.getAttribute()
Element.getAttributeNode()
Attribute names are converted to ASCII lowercase.
This doesn't apply to Element.getAttributeNS()
and Element.getAttributeNodeNS()
.
Document.getElementsByTagName()
Element.getElementsByTagName()
HTML elements match by lower-casing the argument before comparison, elements from other namespaces are treated as in XML (case-sensitively).
Thus, in an HTML document with nodes in multiple namespaces, these methods will effectively be both case-sensitive and case-insensitive at the same time.
APIs for dynamically inserting markup into the document interact with the parser, and thus their behavior varies depending on whether they are used with HTML documents (and the HTML parser) or XHTML in XML documents (and the XML parser).
The open()
method comes in several variants with different numbers of
arguments.
open
( [ type [, replace ] ] )Causes the Document
to be replaced in-place, as if
it was a new Document
object, but reusing the
previous object, which is then returned.
If the type argument is omitted or has the
value "text/html
", then the resulting
Document
has an HTML parser associated with it, which
can be given data to parse using document.write()
. Otherwise, all
content passed to document.write()
will be parsed
as plain text.
If the replace argument is present and has
the value "replace
", the existing entries in
the session history for the Document
object are
removed.
The method has no effect if the Document
is still
being parsed.
Throws an INVALID_STATE_ERR
exception if the
Document
is an XML
document.
open
( url, name, features [, replace ] )Works like the window.open()
method.
close
()Closes the input stream that was opened by the document.open()
method.
Throws an INVALID_STATE_ERR
exception if the
Document
is an XML
document.
document.write()
write
(text...)In general, adds the given string(s) to the
Document
's input stream.
This method has very idiosyncratic behavior. In
some cases, this method can affect the state of the HTML
parser while the parser is running, resulting in a DOM that
does not correspond to the source of the document. In other cases,
the call can clear the current page first, as if document.open()
had been called.
In yet more cases, the method is simply ignored, or throws an
exception. To make matters worse, the exact behavior of this
method can in some cases be dependent on network latency, which
can lead to failures that are very hard to debug. For all
these reasons, use of this method is strongly
discouraged.
This method throws an INVALID_STATE_ERR
exception
when invoked on XML documents.
document.writeln()
writeln
(text...)Adds the given string(s) to the Document
's input
stream, followed by a newline character. If necessary, calls the
open()
method implicitly
first.
This method throws an INVALID_STATE_ERR
exception
when invoked on XML documents.
innerHTML
The innerHTML
IDL
attribute represents the markup of the node's contents.
innerHTML
[ = value ]Returns a fragment of HTML or XML that represents the
Document
.
Can be set, to replace the Document
's contents
with the result of parsing the given string.
In the case of XML documents, will throw an
INVALID_STATE_ERR
if the Document
cannot
be serialized to XML, and a SYNTAX_ERR
if the given
string is not well-formed.
innerHTML
[ = value ]Returns a fragment of HTML or XML that represents the element's contents.
Can be set, to replace the contents of the element with nodes parsed from the given string.
In the case of XML documents, will throw an
INVALID_STATE_ERR
if the element cannot be serialized
to XML, and a SYNTAX_ERR
if the given string is not
well-formed.
outerHTML
The outerHTML
IDL
attribute represents the markup of the element and its contents.
outerHTML
[ = value ]Returns a fragment of HTML or XML that represents the element and its contents.
Can be set, to replace the element with nodes parsed from the given string.
In the case of XML documents, will throw an
INVALID_STATE_ERR
if the element cannot be serialized
to XML, and a SYNTAX_ERR
if the given string is not
well-formed.
Throws a NO_MODIFICATION_ALLOWED_ERR
exception if
the parent of the element is the Document
node.
insertAdjacentHTML()
insertAdjacentHTML
(position, text)Parses the given string text as HTML or XML and inserts the resulting nodes into the tree in the position given by the position argument, as follows:
Throws a SYNTAX_ERR
exception if the arguments
have invalid values (e.g., in the case of XML
documents, if the given string is not well-formed).
Throws a NO_MODIFICATION_ALLOWED_ERR
exception if
the given position isn't possible (e.g. inserting elements after
the root element of a Document
).