--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/LCWD-DOM-Parsing-20131205.html Tue Dec 03 18:23:21 2013 -0800
@@ -0,0 +1,1766 @@
+<!DOCTYPE html>
+<html lang="en" dir="ltr" typeof="bibo:Document w3p:LastCall" about="" property="dcterms:language" content="en">
+<head>
+ <meta charset="UTF-8">
+ <title>DOM Parsing and Serialization</title>
+ <style>
+ /* Make these stand-out more... */
+ .externalDFN {
+ font-style: italic;
+ background-color: #fff9d6;
+ }
+ /* Switch statement */
+ dl.switch dt::before {
+ content: "↪ ";
+ margin-left: 1em;
+ }
+ /* Better spacing around various lists (implied paragraph children) */
+ ol > li, section:not(#toc) ul > li, section dl > dt {
+ margin: 1em 0;
+ }
+ /* domintro styling */
+ dl.domintro {
+ background-color: rgb(221, 255, 221);
+ padding: 1em 0.5em 1em 2em;
+ clear: both;
+ }
+ dl.domintro dt {
+ color: black;
+ }
+ dl.domintro > dd {
+ color: green;
+ }
+ dl.domintro::before {
+ float: right;
+ background-color: white;
+ display: block;
+ border: 2px solid black;
+ color: green;
+ margin-top: -20px;
+ padding: 2px;
+ content: "This box is non-normative. Implementation requirements are given below this box.";
+ }
+ /* Fancy table stuff */
+ table {
+ border-collapse: collapse;
+ }
+ thead tr {
+ border-bottom: 2px solid black;
+ }
+ tbody tr:not(:last-child) {
+ border-bottom: 1px solid black;
+ }
+ td {
+ border-left: 1px solid black;
+ padding: 4px;
+ }
+ /* Extra IDL :-) */
+ .extraidl {
+ line-height: 120%;
+ padding: 1em;
+ border-top: 1px solid #90b8de;
+ border-bottom: 1px solid #90b8de;
+ }
+ .extraidl:before {
+ width: 150px;
+ color: #fff;
+ padding: 3px;
+ font-weight: bold;
+ font-family: initial;
+ margin: -1em 0 1em -1em;
+ display: block;
+ content: "WebIDL";
+ background-color: rgb(144, 184, 222);
+ }
+ </style>
+
+
+<style>/*****************************************************************
+ * ReSpec 3 CSS
+ * Robin Berjon - http://berjon.com/
+ *****************************************************************/
+
+/* --- INLINES --- */
+em.rfc2119 {
+ text-transform: lowercase;
+ font-variant: small-caps;
+ font-style: normal;
+ color: #900;
+}
+
+h1 acronym, h2 acronym, h3 acronym, h4 acronym, h5 acronym, h6 acronym, a acronym,
+h1 abbr, h2 abbr, h3 abbr, h4 abbr, h5 abbr, h6 abbr, a abbr {
+ border: none;
+}
+
+dfn {
+ font-weight: bold;
+}
+
+a.internalDFN {
+ color: inherit;
+ border-bottom: 1px solid #99c;
+ text-decoration: none;
+}
+
+a.externalDFN {
+ color: inherit;
+ border-bottom: 1px dotted #ccc;
+ text-decoration: none;
+}
+
+a.bibref {
+ text-decoration: none;
+}
+
+cite .bibref {
+ font-style: normal;
+}
+
+code {
+ color: #ff4500;
+}
+
+/* --- TOC --- */
+.toc a, .tof a {
+ text-decoration: none;
+}
+
+a .secno, a .figno {
+ color: #000;
+}
+
+ul.tof, ol.tof {
+ list-style: none outside none;
+}
+
+.caption {
+ margin-top: 0.5em;
+ font-style: italic;
+}
+
+/* --- TABLE --- */
+table.simple {
+ border-spacing: 0;
+ border-collapse: collapse;
+ border-bottom: 3px solid #005a9c;
+}
+
+.simple th {
+ background: #005a9c;
+ color: #fff;
+ padding: 3px 5px;
+ text-align: left;
+}
+
+.simple th[scope="row"] {
+ background: inherit;
+ color: inherit;
+ border-top: 1px solid #ddd;
+}
+
+.simple td {
+ padding: 3px 10px;
+ border-top: 1px solid #ddd;
+}
+
+.simple tr:nth-child(even) {
+ background: #f0f6ff;
+}
+
+/* --- DL --- */
+.section dd > p:first-child {
+ margin-top: 0;
+}
+
+.section dd > p:last-child {
+ margin-bottom: 0;
+}
+
+.section dd {
+ margin-bottom: 1em;
+}
+
+.section dl.attrs dd, .section dl.eldef dd {
+ margin-bottom: 0;
+}
+</style><style>/* --- ISSUES/NOTES --- */
+div.issue-title, div.note-title {
+ padding-right: 1em;
+ min-width: 7.5em;
+ color: #b9ab2d;
+}
+div.issue-title { color: #e05252; }
+div.note-title { color: #2b2; }
+div.issue-title span, div.note-title span {
+ text-transform: uppercase;
+}
+div.note, div.issue {
+ margin-top: 1em;
+ margin-bottom: 1em;
+}
+.note > p:first-child, .issue > p:first-child { margin-top: 0 }
+.issue, .note {
+ padding: .5em;
+ border-left-width: .5em;
+ border-left-style: solid;
+}
+div.issue, div.note {
+ padding: 1em 1.2em 0.5em;
+ margin: 1em 0;
+ position: relative;
+ clear: both;
+}
+span.note, span.issue { padding: .1em .5em .15em; }
+
+.issue {
+ border-color: #e05252;
+ background: #fbe9e9;
+}
+.note {
+ border-color: #52e052;
+ background: #e9fbe9;
+}
+
+
+</style><style>/* --- WEB IDL --- */
+pre.idl {
+ border-top: 1px solid #90b8de;
+ border-bottom: 1px solid #90b8de;
+ padding: 1em;
+ line-height: 120%;
+}
+
+pre.idl::before {
+ content: "WebIDL";
+ display: block;
+ width: 150px;
+ background: #90b8de;
+ color: #fff;
+ font-family: initial;
+ padding: 3px;
+ font-weight: bold;
+ margin: -1em 0 1em -1em;
+}
+
+.idlType {
+ color: #ff4500;
+ font-weight: bold;
+ text-decoration: none;
+}
+
+/*.idlModule*/
+/*.idlModuleID*/
+/*.idlInterface*/
+.idlInterfaceID, .idlDictionaryID, .idlCallbackID, .idlEnumID {
+ font-weight: bold;
+ color: #005a9c;
+}
+a.idlEnumItem {
+ color: #000;
+ border-bottom: 1px dotted #ccc;
+ text-decoration: none;
+}
+
+.idlSuperclass {
+ font-style: italic;
+ color: #005a9c;
+}
+
+/*.idlAttribute*/
+.idlAttrType, .idlFieldType, .idlMemberType {
+ color: #005a9c;
+}
+.idlAttrName, .idlFieldName, .idlMemberName {
+ color: #ff4500;
+}
+.idlAttrName a, .idlFieldName a, .idlMemberName a {
+ color: #ff4500;
+ border-bottom: 1px dotted #ff4500;
+ text-decoration: none;
+}
+
+/*.idlMethod*/
+.idlMethType, .idlCallbackType {
+ color: #005a9c;
+}
+.idlMethName {
+ color: #ff4500;
+}
+.idlMethName a {
+ color: #ff4500;
+ border-bottom: 1px dotted #ff4500;
+ text-decoration: none;
+}
+
+/*.idlCtor*/
+.idlCtorName {
+ color: #ff4500;
+}
+.idlCtorName a {
+ color: #ff4500;
+ border-bottom: 1px dotted #ff4500;
+ text-decoration: none;
+}
+
+/*.idlParam*/
+.idlParamType {
+ color: #005a9c;
+}
+.idlParamName, .idlDefaultValue {
+ font-style: italic;
+}
+
+.extAttr {
+ color: #666;
+}
+
+/*.idlSectionComment*/
+.idlSectionComment {
+ color: gray;
+}
+
+/*.idlConst*/
+.idlConstType {
+ color: #005a9c;
+}
+.idlConstName {
+ color: #ff4500;
+}
+.idlConstName a {
+ color: #ff4500;
+ border-bottom: 1px dotted #ff4500;
+ text-decoration: none;
+}
+
+/*.idlException*/
+.idlExceptionID {
+ font-weight: bold;
+ color: #c00;
+}
+
+.idlTypedefID, .idlTypedefType {
+ color: #005a9c;
+}
+
+.idlRaises, .idlRaises a.idlType, .idlRaises a.idlType code, .excName a, .excName a code {
+ color: #c00;
+ font-weight: normal;
+}
+
+.excName a {
+ font-family: monospace;
+}
+
+.idlRaises a.idlType, .excName a.idlType {
+ border-bottom: 1px dotted #c00;
+}
+
+.excGetSetTrue, .excGetSetFalse, .prmNullTrue, .prmNullFalse, .prmOptTrue, .prmOptFalse {
+ width: 45px;
+ text-align: center;
+}
+.excGetSetTrue, .prmNullTrue, .prmOptTrue { color: #0c0; }
+.excGetSetFalse, .prmNullFalse, .prmOptFalse { color: #c00; }
+
+.idlImplements a {
+ font-weight: bold;
+}
+
+dl.attributes, dl.methods, dl.constants, dl.constructors, dl.fields, dl.dictionary-members {
+ margin-left: 2em;
+}
+
+.attributes dt, .methods dt, .constants dt, .constructors dt, .fields dt, .dictionary-members dt {
+ font-weight: normal;
+}
+
+.attributes dt code, .methods dt code, .constants dt code, .constructors dt code, .fields dt code, .dictionary-members dt code {
+ font-weight: bold;
+ color: #000;
+ font-family: monospace;
+}
+
+.attributes dt code, .fields dt code, .dictionary-members dt code {
+ background: #ffffd2;
+}
+
+.attributes dt .idlAttrType code, .fields dt .idlFieldType code, .dictionary-members dt .idlMemberType code {
+ color: #005a9c;
+ background: transparent;
+ font-family: inherit;
+ font-weight: normal;
+ font-style: italic;
+}
+
+.methods dt code {
+ background: #d9e6f8;
+}
+
+.constants dt code {
+ background: #ddffd2;
+}
+
+.constructors dt code {
+ background: #cfc;
+}
+
+.attributes dd, .methods dd, .constants dd, .constructors dd, .fields dd, .dictionary-members dd {
+ margin-bottom: 1em;
+}
+
+table.parameters, table.exceptions {
+ border-spacing: 0;
+ border-collapse: collapse;
+ margin: 0.5em 0;
+ width: 100%;
+}
+table.parameters { border-bottom: 1px solid #90b8de; }
+table.exceptions { border-bottom: 1px solid #deb890; }
+
+.parameters th, .exceptions th {
+ color: #fff;
+ padding: 3px 5px;
+ text-align: left;
+ font-family: initial;
+ font-weight: normal;
+ text-shadow: #666 1px 1px 0;
+}
+.parameters th { background: #90b8de; }
+.exceptions th { background: #deb890; }
+
+.parameters td, .exceptions td {
+ padding: 3px 10px;
+ border-top: 1px solid #ddd;
+ vertical-align: top;
+}
+
+.parameters tr:first-child td, .exceptions tr:first-child td {
+ border-top: none;
+}
+
+.parameters td.prmName, .exceptions td.excName, .exceptions td.excCodeName {
+ width: 100px;
+}
+
+.parameters td.prmType {
+ width: 120px;
+}
+
+table.exceptions table {
+ border-spacing: 0;
+ border-collapse: collapse;
+ width: 100%;
+}
+</style><link href="https://www.w3.org/StyleSheets/TR/W3C-WD" rel="stylesheet"><!--[if lt IE 9]><script src='https://www.w3.org/2008/site/js/html5shiv.js'></script><![endif]--></head>
+<body id="respecDocument" role="document" class="h-entry"><div id="respecHeader" role="contentinfo" class="head">
+ <p>
+
+ <a href="http://www.w3.org/"><img src="https://www.w3.org/Icons/w3c_home" alt="W3C" height="48" width="72"></a>
+
+ </p>
+ <h1 class="title p-name" id="title" property="dcterms:title">DOM Parsing and Serialization</h1>
+
+ <h2 property="bibo:subtitle" id="subtitle">DOMParser, XMLSerializer, innerHTML, and similar APIs</h2>
+
+ <h2 id="w3c-last-call-working-draft-03-december-2013" property="dcterms:issued" datatype="xsd:dateTime" content="2013-12-04T02:16:56.000Z"><abbr title="World Wide Web Consortium">W3C</abbr> Last Call Working Draft <time class="dt-published" datetime="2013-12-03">03 December 2013</time></h2>
+ <dl>
+
+ <dt>This version:</dt>
+ <dd><a class="u-url" href="http://www.w3.org/TR/2013/WD-DOM-Parsing-20131203/">http://www.w3.org/TR/2013/WD-DOM-Parsing-20131203/</a></dd>
+ <dt>Latest published version:</dt>
+ <dd><a href="http://www.w3.org/TR/DOM-Parsing/">http://www.w3.org/TR/DOM-Parsing/</a></dd>
+
+
+ <dt>Latest editor's draft:</dt>
+ <dd><a href="http://dvcs.w3.org/hg/innerhtml/raw-file/tip/index.html">http://dvcs.w3.org/hg/innerhtml/raw-file/tip/index.html</a></dd>
+
+
+ <dt>Test suite:</dt>
+ <dd><a href="https://github.com/whatwg/domparsing/tree/master/tests">https://github.com/whatwg/domparsing/tree/master/tests</a></dd>
+
+
+
+
+ <dt>Previous version:</dt>
+ <dd><a rel="dcterms:replaces" href="http://www.w3.org/TR/2012/2012-09-20-DOM-Parsing-20120920/">http://www.w3.org/TR/2012/2012-09-20-DOM-Parsing-20120920/</a></dd>
+
+
+ <dt>Editor:</dt>
+ <dd class="p-author h-card vcard" rel="bibo:editor" inlist=""><span typeof="foaf:Person"><span property="foaf:name" class="p-name fn">Travis Leithead</span>, <a rel="foaf:workplaceHomepage" class="p-org org h-org h-card" href="http://www.microsoft.com">Microsoft</a>, <span class="ed_mailto"><a class="u-email email" rel="foaf:mbox" href="mailto:travis.leithead@microsoft.com">travis.leithead@microsoft.com</a></span></span>
+</dd>
+
+
+
+
+
+ <dt>WHATWG Living Standard:</dt>
+
+
+
+ <dd>
+ <a href="http://domparsing.spec.whatwg.org/">
+ http://domparsing.spec.whatwg.org/
+ </a>
+ </dd>
+
+
+
+
+
+
+ </dl>
+
+
+
+
+
+ <p class="copyright">
+ <a href="http://www.w3.org/Consortium/Legal/ipr-notice#Copyright">Copyright</a> ©
+ 2013
+
+ <a href="http://www.w3.org/"><abbr title="World Wide Web Consortium">W3C</abbr></a><sup>®</sup>
+ (<a href="http://www.csail.mit.edu/"><abbr title="Massachusetts Institute of Technology">MIT</abbr></a>,
+ <a href="http://www.ercim.eu/"><abbr title="European Research Consortium for Informatics and Mathematics">ERCIM</abbr></a>,
+ <a href="http://www.keio.ac.jp/">Keio</a>, <a href="http://ev.buaa.edu.cn/">Beihang</a>),
+
+ All Rights Reserved.
+
+ <abbr title="World Wide Web Consortium">W3C</abbr> <a href="http://www.w3.org/Consortium/Legal/ipr-notice#Legal_Disclaimer">liability</a>,
+ <a href="http://www.w3.org/Consortium/Legal/ipr-notice#W3C_Trademarks">trademark</a> and
+
+ <a href="http://www.w3.org/Consortium/Legal/copyright-documents">document use</a>
+
+ rules apply.
+ </p>
+
+
+ <hr>
+</div>
+
+ <section rel="bibo:Chapter" resource="#ref" typeof="bibo:Chapter" datatype="" property="dcterms:abstract" class="introductory" id="abstract"><h2 id="h2_abstract" role="heading" aria-level="1">Abstract</h2>
+ <p>This specification defines various APIs for programmatic access to
+ HTML and generic XML parsers by web applications for use in parsing
+ and serializing DOM nodes.</p>
+ </section><section rel="bibo:Chapter" resource="#ref" typeof="bibo:Chapter" id="sotd" class="introductory"><h2 id="h2_sotd" role="heading" aria-level="1">Status of This Document</h2>
+
+
+
+ <p>
+ <em>This section describes the status of this document at the time of its publication.
+ Other documents may supersede this document. A list of current <abbr title="World Wide Web Consortium">W3C</abbr> publications and the
+ latest revision of this technical report can be found in the <a href="http://www.w3.org/TR/"><abbr title="World Wide Web Consortium">W3C</abbr> technical reports index</a> at
+ http://www.w3.org/TR/.</em>
+ </p>
+
+ <p>This specification is based on the original work of the <a href="http://domparsing.spec.whatwg.org/">
+ DOM Parsing and Serialization Living Standard</a>, though it has diverged in terms of
+ supported features, normative requirements, and algorithm specificity. As appropriate,
+ relevant fixes from the living standard are incorporated into this document.
+ </p>
+ <p>
+ This document was published by the <a href="http://www.w3.org/2008/webapps/">Web Applications Working Group</a> as a Last Call Working Draft.
+
+ This document is intended to become a <abbr title="World Wide Web Consortium">W3C</abbr> Recommendation.
+
+
+ If you wish to make comments regarding this document, please send them to
+ <a href="mailto:www-dom@w3.org?subject=DOM-Parsing">www-dom@w3.org</a>
+ (<a href="mailto:www-dom-request@w3.org?subject=subscribe">subscribe</a>,
+ <a href="http://lists.w3.org/Archives/Public/www-dom/">archives</a>)
+ with <code>DOM-Parsing</code> at the start of your email's subject.
+
+ The Last Call period ends 01 January 2014.
+
+
+ All comments are welcome.
+
+ </p>
+
+
+ <p>
+ Publication as a Last Call Working Draft does not imply endorsement by the <abbr title="World Wide Web Consortium">W3C</abbr>
+ Membership. This is a draft document and may be updated, replaced or obsoleted by other
+ documents at any time. It is inappropriate to cite this document as other than work in
+ progress.
+ </p>
+
+
+ <p>
+ This is a Last Call Working Draft and thus the Working Group has determined that this
+ document has satisfied the relevant technical requirements and is sufficiently stable to
+ advance through the Technical Recommendation process.
+ </p>
+
+ <p>
+
+ This document was produced by a group operating under the
+ <a id="sotd_patent" about="" rel="w3p:patentRules" href="http://www.w3.org/Consortium/Patent-Policy-20040205/">5 February 2004 <abbr title="World Wide Web Consortium">W3C</abbr> Patent
+ Policy</a>.
+
+
+
+
+ <abbr title="World Wide Web Consortium">W3C</abbr> maintains a <a href="http://www.w3.org/2004/01/pp-impl/42538/status" rel="disclosure">public list of any patent
+ disclosures</a>
+
+ made in connection with the deliverables of the group; that page also includes
+ instructions for disclosing a patent. An individual who has actual knowledge of a patent
+ which the individual believes contains
+ <a href="http://www.w3.org/Consortium/Patent-Policy-20040205/#def-essential">Essential
+ Claim(s)</a> must disclose the information in accordance with
+ <a href="http://www.w3.org/Consortium/Patent-Policy-20040205/#sec-Disclosure">section
+ 6 of the <abbr title="World Wide Web Consortium">W3C</abbr> Patent Policy</a>.
+
+
+ </p>
+
+
+
+
+</section><section id="toc"><h2 id="h2_toc" role="heading" aria-level="1" class="introductory">Table of Contents</h2><ul id="respecContents" role="directory" class="toc"><li class="tocline"><a class="tocxref" href="#conformance"><span class="secno">1. </span>Conformance</a><ul class="toc"><li class="tocline"><a class="tocxref" href="#dependencies"><span class="secno">1.1 </span>Dependencies</a></li><li class="tocline"><a class="tocxref" href="#extensibility"><span class="secno">1.2 </span>Extensibility</a></li></ul></li><li class="tocline"><a class="tocxref" href="#terminology"><span class="secno">2. </span>Terminology</a></li><li class="tocline"><a class="tocxref" href="#parsing-and-serializing-nodes"><span class="secno">3. </span>Parsing and serializing <span title="node" data-spec="DOM4" class="formerLink">Node</span>s</a><ul class="toc"><li class="tocline"><a class="tocxref" href="#parsing"><span class="secno">3.1 </span>Parsing</a></li><li class="tocline"><a class="tocxref" href="#serializing"><span class="secno">3.2 </span>Serializing</a></li></ul></li><li class="tocline"><a class="tocxref" href="#the-domparser-interface"><span class="secno">4. </span>The <code>DOMParser</code> interface</a><ul class="toc"><li class="tocline"><a class="tocxref" href="#methods"><span class="secno">4.1 </span>Methods</a></li></ul></li><li class="tocline"><a class="tocxref" href="#the-xmlserializer-interface"><span class="secno">5. </span>The <code>XMLSerializer</code> interface</a><ul class="toc"><li class="tocline"><a class="tocxref" href="#methods-1"><span class="secno">5.1 </span>Methods</a></li></ul></li><li class="tocline"><a class="tocxref" href="#extensions-to-the-element-interface"><span class="secno">6. </span>Extensions to the <code><span title="element" data-spec="DOM4" class="formerLink">Element</span></code> interface</a><ul class="toc"><li class="tocline"><a class="tocxref" href="#attributes"><span class="secno">6.1 </span>Attributes</a></li><li class="tocline"><a class="tocxref" href="#methods-2"><span class="secno">6.2 </span>Methods</a></li></ul></li><li class="tocline"><a class="tocxref" href="#extensions-to-the-range-interface"><span class="secno">7. </span>Extensions to the <code><span data-spec="DOM4" title="range" class="formerLink">Range</span></code> interface</a><ul class="toc"><li class="tocline"><a class="tocxref" href="#methods-3"><span class="secno">7.1 </span>Methods</a></li></ul></li><li class="tocline"><a class="tocxref" href="#acknowledgements"><span class="secno">A. </span>Acknowledgements</a></li><li class="tocline"><a class="tocxref" href="#references"><span class="secno">B. </span>References</a><ul class="toc"><li class="tocline"><a class="tocxref" href="#normative-references"><span class="secno">B.1 </span>Normative references</a></li><li class="tocline"><a class="tocxref" href="#informative-references"><span class="secno">B.2 </span>Informative references</a></li></ul></li></ul></section>
+
+
+
+
+ <section rel="bibo:Chapter" resource="#ref" typeof="bibo:Chapter" id="issues" class="introductory">
+ <h1 id="h1_issues" role="heading" aria-level="1">Issues</h1>
+
+ <div class="issue"><div id="h_issue_1" role="heading" aria-level="2" class="issue-title"><span>Issue 1</span></div><p class="">Open issues that appear throughout the remainder of this
+ document will be highlighted like this.</p></div>
+
+ <!-- I don't believe this is a point of contention anymore...
+ <p class="issue">This specification currently requires using the XML
+ Parser for some APIs, when in an XML document. It is unclear whether
+ consensus can be found for this approach.</p>
+ -->
+ </section>
+
+ <section rel="bibo:Chapter" resource="#ref" typeof="bibo:Chapter" id="conformance"><!--OddPage--><h2 id="h2_conformance" role="heading" aria-level="1"><span class="secno">1. </span>Conformance</h2>
+<p>
+ As well as sections marked as non-normative, all authoring guidelines, diagrams, examples,
+ and notes in this specification are non-normative. Everything else in this specification is
+ normative.
+</p>
+<p>
+ The key words <em title="MUST" class="rfc2119">MUST</em>, <em title="MUST NOT" class="rfc2119">MUST NOT</em>, <em title="REQUIRED" class="rfc2119">REQUIRED</em>, <em title="SHOULD" class="rfc2119">SHOULD</em>, <em title="SHOULD NOT" class="rfc2119">SHOULD NOT</em>, <em title="RECOMMENDED" class="rfc2119">RECOMMENDED</em>, <em title="MAY" class="rfc2119">MAY</em>,
+ and <em title="OPTIONAL" class="rfc2119">OPTIONAL</em> in this specification are to be interpreted as described in [<cite><a href="#bib-RFC2119" class="bibref">RFC2119</a></cite>].
+</p>
+
+ <p>Requirements phrased in the imperative as part of algorithms
+ (such as "strip any leading space characters" or "return false and
+ terminate these steps") are to be interpreted with the meaning of the
+ key word ("must", "should", "may", etc) used in introducing the
+ algorithm.</p>
+
+ <p>Conformance requirements phrased as algorithms or specific steps
+ may be implemented in any manner, so long as the end result is
+ equivalent. (In particular, the algorithms defined in this
+ specification are intended to be easy to follow, and not intended to
+ be performant.)</p>
+
+ <p id="hardwareLimitations">User agents may impose
+ implementation-specific limits on otherwise unconstrained inputs,
+ e.g. to prevent denial of service attacks, to guard against running
+ out of memory, or to work around platform-specific limitations.</p>
+
+ <p>When a method or an attribute is said to call another method or
+ attribute, the user agent must invoke its internal API for that
+ attribute or method so that e.g. the author can't change the behavior
+ by overriding attributes or methods with custom properties or functions
+ in ECMAScript.</p>
+
+ <p>Unless otherwise stated, string comparisons are done in a <a data-spec="DOM4" class="externalDFN" title="case-sensitive">
+ case-sensitive</a> manner.</p>
+
+ <p>If an algorithm calls into another algorithm, any exception that is
+ thrown by the latter (unless it is explicitly caught), must cause the
+ former to terminate, and the exception to be propagated up to
+ <em>its</em> caller.</p>
+
+ <section id="dependencies">
+ <h3 id="h3_dependencies" role="heading" aria-level="2"><span class="secno">1.1 </span>Dependencies</h3>
+
+ <p>The IDL fragments in this specification must be interpreted as
+ required for conforming IDL fragments, as described in the Web IDL
+ specification. [<cite><a href="#bib-WEBIDL" class="bibref">WEBIDL</a></cite>]</p>
+
+ <p>Some of the terms used in this specification are defined in
+ [<cite><a href="#bib-DOM4" class="bibref">DOM4</a></cite>], [<cite><a href="#bib-HTML5" class="bibref">HTML5</a></cite>], and [<cite><a href="#bib-XML10" class="bibref">XML10</a></cite>].
+ </p></section>
+
+ <section id="extensibility">
+ <h3 id="h3_extensibility" role="heading" aria-level="2"><span class="secno">1.2 </span>Extensibility</h3>
+
+ <p>Vendor-specific proprietary extensions to this specification are
+ strongly discouraged. Authors must not use such extensions, as
+ doing so reduces interoperability and fragments the user base,
+ allowing only users of specific user agents to access the content in
+ question.</p>
+
+ <p>If vendor-specific extensions are needed, the members should be
+ prefixed by vendor-specific strings to prevent clashes with future
+ versions of this specification. Extensions must be defined so that
+ the use of extensions neither contradicts nor causes the
+ non-conformance of functionality defined in the specification.</p>
+
+ <p>When vendor-neutral extensions to this specification are needed,
+ either this specification can be updated accordingly, or an
+ extension specification can be written that overrides the
+ requirements in this specification. When someone applying this
+ specification to their activities decides that they will recognise
+ the requirements of such an extension specification, it becomes an
+ <dfn id="dfn-other-applicable-specifications" title="other applicable specifications">applicable
+ specification</dfn> for the purposes of conformance requirements in
+ this specification.</p>
+ <!-- http://www.w3.org/mid/17E341CD-E790-422C-9F9A-69347EE01CEB@iki.fi -->
+ </section>
+ </section>
+
+ <section id="terminology">
+ <!--OddPage--><h2 id="h2_terminology" role="heading" aria-level="1"><span class="secno">2. </span>Terminology</h2>
+
+ <p>The term <dfn id="dfn-context-object">context object</dfn> means the object on which the method or
+ attribute being discussed was called.
+ </p></section>
+
+
+ <section id="parsing-and-serializing-nodes">
+ <!--OddPage--><h2 id="h2_parsing-and-serializing-nodes" role="heading" aria-level="1"><span class="secno">3. </span>Parsing and serializing <a title="node" data-spec="DOM4" class="externalDFN">Node</a>s</h2>
+
+ <section id="parsing">
+ <h3 id="h3_parsing" role="heading" aria-level="2"><span class="secno">3.1 </span>Parsing</h3>
+
+ <p>The following steps form the
+ <dfn id="dfn-concept-parse-fragment" title="concept-parse-fragment">fragment parsing algorithm</dfn>, whose
+ arguments are a <var>markup</var> string and a
+ <var>context element</var>.
+
+ </p><ol>
+ <li>
+ <p>If the <var>context element</var>'s
+ <a title="concept-node-document" data-spec="DOM4" class="externalDFN">node document</a>
+ is an <a title="html-document" data-spec="DOM4" class="externalDFN">HTML document</a>: let
+ <var>algorithm</var> be the
+ <a title="html-fragment-parsing-algorithm" data-spec="HTML5" class="externalDFN">HTML
+ fragment parsing algorithm</a>.</p>
+
+ <p>If the <var>context element</var>'s
+ <a title="concept-node-document" data-spec="DOM4" class="externalDFN">node document</a>
+ is an <a title="xml-document" data-spec="DOM4" class="externalDFN">XML document</a>: let
+ <var>algorithm</var> be the
+ <a title="xml-fragment-parsing-algorithm" data-spec="HTML5" class="externalDFN">XML
+ fragment parsing algorithm</a>.</p>
+ </li>
+
+ <li>Invoke <var>algorithm</var> with <var>markup</var> as
+ the <var>input</var>, and <var>context element</var> as the
+ <var><a data-spec="HTML5" title="concept-frag-parse-context" class="externalDFN">context</a></var>
+ element.</li>
+
+ <li>Let <var>new children</var> be the nodes returned.</li>
+
+ <li>Let <var>fragment</var> be a new
+ <code><a title="documentfragment" data-spec="DOM4" class="externalDFN">DocumentFragment</a></code> whose
+ <a title="concept-node-document" data-spec="DOM4" class="externalDFN">node document</a>
+ is <var>context element</var>'s
+ <a title="concept-node-document" data-spec="DOM4" class="externalDFN">node document</a>.
+
+ </li><li><a data-spec="DOM4" title="concept-node-append" class="externalDFN">Append</a>
+ each <a data-spec="DOM4" title="concept-node" class="externalDFN">node</a> in
+ <var>new children</var> to <var>fragment</var> (in order).
+
+ <div class="note"><div id="h_note_1" role="heading" aria-level="3" class="note-title"><span>Note</span></div><p class="">This ensures the
+ <a title="concept-node-document" data-spec="DOM4" class="externalDFN">node document</a>
+ for the new <a data-spec="DOM4" title="concept-node" class="externalDFN">nodes</a> is correct.
+
+ </p></div></li><li>Return <var>fragment</var>.
+ </li></ol>
+ </section>
+
+ <section id="serializing">
+ <h3 id="h3_serializing" role="heading" aria-level="2"><span class="secno">3.2 </span>Serializing</h3>
+ <p>To <dfn id="dfn-concept-serialize" title="concept-serialize">serialize</dfn> a
+ <a title="node" data-spec="DOM4" class="externalDFN">Node</a> <var>node</var>, the user agent
+ must run the following steps:
+
+ </p><ol>
+ <li>Let <var>document</var> be <var>node</var>'s
+ <a title="concept-node-document" data-spec="DOM4" class="externalDFN">node document</a>.
+ </li><li>If <var>document</var> is an
+ <a title="html-document" data-spec="DOM4" class="externalDFN">HTML document</a>,
+ return an <a class="internalDFN" href="#dfn-concept-serialize-html" title="concept-serialize-html">HTML serialization</a> of <var>node</var>.
+ </li><li>Otherwise, <var>document</var> is an
+ <a title="xml-document" data-spec="DOM4" class="externalDFN">XML document</a>.
+ </li><li>Let <var>context namespace</var> be <code>null</code>.
+ </li><li>Let <var>prefix list</var> be an empty list. The <var>prefix list</var> will
+ contain strings that represent a history of namespace prefixes [<cite><a href="#bib-XML-NAMES" class="bibref">XML-NAMES</a></cite>]
+ that have been serialized by the <a class="internalDFN" href="#dfn-concept-serialize-xml" title="concept-serialize-xml">XML serialization</a>
+ algorithm for a subtree.
+ </li><li>Return an <a class="internalDFN" href="#dfn-concept-serialize-xml" title="concept-serialize-xml">XML serialization</a> of <var>node</var>
+ providing to the algorithm <var>context namespace</var> as the <var>namespace</var>
+ and <var>prefix list</var> as <var>prefixes</var>.
+ </li></ol>
+
+ <p>To produce an <dfn id="dfn-concept-serialize-html" title="concept-serialize-html">HTML serialization</dfn> of a
+ <a title="node" data-spec="DOM4" class="externalDFN">Node</a> <var>node</var>, the user agent
+ must run the
+ <a data-spec="HTML5" title="html-fragment-serialization-algorithm" class="externalDFN">HTML
+ fragment serialization algorithm</a> [<cite><a href="#bib-HTML5" class="bibref">HTML5</a></cite>] on <var>node</var> and return the string produced.
+
+ </p><p>To produce an <dfn id="dfn-concept-serialize-xml" title="concept-serialize-xml">XML serialization</dfn> of a
+ <a title="node" data-spec="DOM4" class="externalDFN">Node</a> <var>node</var> given a
+ context namespace <var>namespace</var> and prefix list <var>prefixes</var>, the user
+ agent must run the appropriate steps, depending on <var>node</var>'s interface:</p>
+
+ <div class="note"><div id="h_note_2" role="heading" aria-level="3" class="note-title"><span>Note</span></div><p class="">The following steps for serializing a <var>node</var> belonging to an
+ <a title="xml-document" data-spec="DOM4" class="externalDFN">XML document</a> are
+ designed to produce a serialization that is compatible with the
+ <a title="html-parser" data-spec="HTML5" class="externalDFN">HTML parser</a>. For example,
+ elements in the XHTML namespace that contain no child nodes are serialized with
+ an explicit begin and end tag rather than using the XML self-closing syntax. Exceptions
+ to this rule occur when an XHTML element's equivalent HTML element is a
+ <a title="void-elements" data-spec="HTML5" class="externalDFN">void element</a> that
+ would be auto-closed by the
+ <a title="html-parser" data-spec="HTML5" class="externalDFN">HTML parser</a>.
+
+ </p></div><dl class="switch">
+ <dt><code><a title="element" data-spec="DOM4" class="externalDFN">Element</a></code>
+ </dt><dd>
+ <p>Run the following algorithm:
+ </p><ol>
+ <!-- "namespace" was passed via the caller -->
+ <li>Let <var>markup</var> be an empty string.
+ </li><li>Let <var>list</var> be a copy of the <var>prefixes</var> array.
+ </li><li>Let <var>prefix</var> be the value of <var>node</var>'s
+ <code><a title="dom-Element-prefix" data-spec="DOM4" class="externalDFN">prefix</a></code>
+ attribute.
+ </li><li>Let <var>ns</var> be the value of <var>node</var>'s
+ <code><a title="dom-Element-namespaceURI" data-spec="DOM4" class="externalDFN">namespaceURI</a></code>
+ attribute.
+ </li><li>Let a <var>skip end tag</var> flag have the value <code>false</code>.
+ </li><li>Append "<code><</code>" (U+003C LESS-THAN SIGN) to <var>markup</var>.
+ </li><li>If <var>prefix</var> is not <code>null</code> then append the following to
+ <var>markup</var>:
+ <ol>
+ <li>The value of <var>prefix</var>;
+ </li><li>"<code>:</code>" (U+003A COLON).
+ </li></ol>
+ </li><li>Append the value of <var>node</var>'s
+ <code><a title="dom-Element-localName" data-spec="DOM4" class="externalDFN">localName</a></code>
+ attribute to <var>markup</var>.
+ <!-- Tried ":" in names, but this doesn't trick the serializer--it just produces
+ a serialization that is not round-trippable
+ <p class="issue">escaping / throwing -->
+ </li><li>If <var>namespace</var> is not equal to <var>ns</var> (the <var>node</var>'s
+ own namespace is different from its parent), and <var>prefix</var> is not
+ <code>null</code>, then run these sub-steps:
+ <div class="note"><div id="h_note_3" role="heading" aria-level="3" class="note-title"><span>Note</span></div><p class="">These steps determine whether a namespace prefix is
+ serialized for this node.
+ </p></div><ol>
+ <li>If <var>list</var> contains the value of <var>prefix</var>, then
+ abort these sub-steps. This namespace prefix
+ was already serialized.
+ </li><li>Add the value of <var>prefix</var> to <var>list</var>.
+ </li><li>If <var>node</var> has an attribute whose
+ <a title="concept-attribute-name" data-spec="DOM4" class="externalDFN">name</a>
+ attribute value is equal to the concatenation of the string
+ "<code>xmlns:</code>" with the value of <var>prefix</var>, abort
+ these sub-steps. The <var>prefix</var> namespace definition will be
+ serialized later as part of the <a class="internalDFN" href="#dfn-concept-serialize-xml-attributes" title="concept-serialize-xml-attributes">XML
+ serialization of <var>node</var>'s attributes</a>.
+ </li><li>Append the following to <var>markup</var>, in order:
+ <ol>
+ <li>"<code> </code>" (U+0020 SPACE);
+ </li><li>The string "<code>xmlns:</code>";
+ </li><li>The value of <var>prefix</var>;
+ </li><li>"<code>="</code>" (U+003D EQUALS SIGN, U+0022 QUOTATION MARK);
+ </li><li>The value of <var>ns</var>;
+ </li><li>"<code>"</code>" (U+0022 QUOTATION MARK);
+ </li></ol>
+ </li></ol>
+ </li><li>If <var>namespace</var> is not equal to <var>ns</var>, and <var>prefix</var>
+ is <code>null</code>, then run these sub-steps:
+ <div class="note"><div id="h_note_4" role="heading" aria-level="3" class="note-title"><span>Note</span></div><p class="">These steps determine whether a default namespace is
+ serialized for this node.
+ </p></div><ol>
+ <li>If <var>node</var> has an attribute whose
+ <a title="concept-attribute-name" data-spec="DOM4" class="externalDFN">name</a>
+ attribute value is equal to "<code>xmlns</code>", abort
+ these sub-steps. The default namespace will be
+ serialized later as part of the <a class="internalDFN" href="#dfn-concept-serialize-xml-attributes" title="concept-serialize-xml-attributes">XML
+ serialization of <var>node</var>'s attributes</a>.
+ </li><li>Append the following to <var>markup</var>, in order:
+ <ol>
+ <li>"<code> </code>" (U+0020 SPACE);
+ </li><li>The string "<code>xmlns</code>";
+ </li><li>"<code>="</code>" (U+003D EQUALS SIGN, U+0022 QUOTATION MARK);
+ </li><li>The value of <var>ns</var>;
+ </li><li>"<code>"</code>" (U+0022 QUOTATION MARK);
+ </li></ol>
+ </li></ol>
+ </li><li>Append to <var>markup</var> the result of the
+ <a class="internalDFN" href="#dfn-concept-serialize-xml-attributes" title="concept-serialize-xml-attributes">XML
+ serialization of <var>node</var>'s attributes</a>, passing <var>list</var>
+ as the <var>prefixes</var>.
+ </li><li>If the value of <var>ns</var> is the string "<code>http://www.w3.org/1999/xhtml</code>",
+ and the <var>node</var>'s list of
+ <a title="concept-tree-child" data-spec="DOM4" class="externalDFN">children</a>
+ is empty, and the <var>node</var>'s
+ <code><a title="dom-Element-tagName" data-spec="DOM4" class="externalDFN">tagName</a></code>
+ matches any one of the following
+ <a title="void-elements" data-spec="HTML5" class="externalDFN">void elements</a>:
+ "<code>area</code>",
+ "<code>base</code>",
+ "<code>br</code>",
+ "<code>col</code>",
+ "<code>embed</code>",
+ "<code>hr</code>",
+ "<code>img</code>",
+ "<code>input</code>",
+ "<code>keygen</code>",
+ "<code>link</code>",
+ "<code>menuitem</code>",
+ "<code>meta</code>",
+ "<code>param</code>",
+ "<code>source</code>",
+ "<code>track</code>",
+ "<code>wbr</code>";
+ then append the following to <var>markup</var>, in order:
+ <ol>
+ <li>"<code> </code>" (U+0020 SPACE);
+ </li><li>"<code>/</code>" (U+002F SOLIDUS);
+ </li></ol>
+ and set the <var>skip end tag</var> flag to <code>true</code>.
+ </li><li>If the value of <var>ns</var> is not the string "<code>http://www.w3.org/1999/xhtml</code>",
+ and the <var>node</var>'s list of
+ <a title="concept-tree-child" data-spec="DOM4" class="externalDFN">children</a>
+ is empty, then append "<code>/</code>" (U+002F SOLIDUS) to <var>markup</var>
+ and set the <var>skip end tag</var> flag to <code>true</code>.
+ </li><li>Append "<code>></code>" (U+003E GREATER-THAN SIGN) to <var>markup</var>.
+ </li><li>If the value of <var>skip end tag</var> is <code>true</code>, then return
+ the value of <var>markup</var> and skip the remaining steps. The
+ <var>node</var> is a leaf-node.
+ </li><li>Append to <var>markup</var> the result of performing an
+ <a class="internalDFN" href="#dfn-concept-serialize-xml" title="concept-serialize-xml">XML serialization</a> of each of
+ <var>node</var>'s
+ <a title="concept-tree-child" data-spec="DOM4" class="externalDFN">children</a>,
+ in order, providing the value of <var>ns</var> for the <var>namespace</var>
+ and <var>list</var> for the <var>prefixes</var>.
+ </li><li>Append "<code></</code>" (U+003C LESS-THAN SIGN, U+002F SOLIDUS) to
+ <var>markup</var>.
+ </li><li>If the value of <var>prefix</var> is not <code>null</code>, then append the
+ following to <var>markup</var>, in order:
+ <ol>
+ <li>The value of <var>prefix</var>;
+ </li><li>"<code>:</code>" (U+003A COLON).
+ </li></ol>
+ </li><li>Append the value of <var>node</var>'s
+ <code><a title="dom-Element-localName" data-spec="DOM4" class="externalDFN">localName</a></code>
+ attribute to <var>markup</var>.
+ </li><li>Append "<code>></code>" (U+003E GREATER-THAN SIGN) to <var>markup</var>.
+ </li><li>Return the value of <var>markup</var>.
+ </li></ol>
+
+ </dd><dt><code><a title="document" data-spec="DOM4" class="externalDFN">Document</a></code>
+ </dt><dd>
+ <p>Return the result of concatenating the following, in order:
+ </p><ol>
+ <li>The string produced by running the steps to
+ <a class="internalDFN" href="#dfn-concept-serialize-doctype" title="concept-serialize-doctype">produce a DocumentType serialization</a>
+ of <var>node</var>'s
+ <a title="dom-Document-doctype" data-spec="HTML5" class="externalDFN">doctype</a>
+ attribute;
+ </li><li>The string produced by an <a class="internalDFN" href="#dfn-concept-serialize-xml" title="concept-serialize-xml">XML serialization</a>
+ of <var>node</var>'s
+ <a title="dom-Document-documentElement" data-spec="HTML5" class="externalDFN">documentElement</a>
+ attribute, providing <code>null</code> as the <var>namespace</var> and an
+ empty list as <var>prefixes</var>.
+ </li></ol>
+
+ </dd><dt><code><a title="comment" data-spec="DOM4" class="externalDFN">Comment</a></code>
+ </dt><dd><ol>
+ <li>Let <var>markup</var> be the concatenation of "<code><!--</code>", <var>node</var>'s
+ <code><a title="dom-characterdata-data" data-spec="DOM4" class="externalDFN">data</a></code>, and
+ "<code>--></code>".
+
+ </li><li>If <var>markup</var> matches the
+ <code><a data-spec="XML10" title="comment" class="externalDFN">Comment</a></code> production, return
+ <var>markup</var>. Otherwise, throw a
+ <code><a title="domexception" data-spec="DOM4" class="externalDFN">DOMException</a></code>
+ with name <code>InvalidStateError</code>.
+ </li></ol>
+ </dd><dt><code><a title="cdata" data-spec="DOML2" class="externalDFN">CDATASection</a></code>
+ </dt><dd><ol>
+ <li>Let <var>markup</var> be the concatenation of "<code><![CDATA[</code>",
+ <var>node</var>'s
+ <code><a title="dom-characterdata-data" data-spec="DOM4" class="externalDFN">data</a></code>,
+ and "<code>]]></code>".
+
+ <!-- This does not actually appear to be the case in implementations today.
+ <p>If <var>data</var> doesn't match the
+ <code><a title="NT-CData" data-spec="XML10" class="externalDFN">CDSect</a></code> production, throw a
+ <code><a title=domexception data-spec="DOM4" class="externalDFN">DOMException</a></code>
+ with name <code>InvalidStateError</code> and terminate the entire algorithm.
+ -->
+
+ </li><li>Return <var>markup</var>.
+ </li></ol>
+
+ <div class="note"><div id="h_note_5" role="heading" aria-level="3" class="note-title"><span>Note</span></div><p class="">CDATASection objects may be created by the historical
+ <code>document.createCDATASection</code> API, or as a result of parsing an
+ <a title="xml-document" data-spec="DOM4" class="externalDFN">XML document</a>.
+
+ </p></div></dd><dt><code><a title="text" data-spec="DOM4" class="externalDFN">Text</a></code>
+ </dt><dd><ol>
+ <li>Let <var>markup</var> be <var>node</var>'s
+ <code><a title="dom-characterdata-data" data-spec="DOM4" class="externalDFN">data</a></code>.
+
+ </li><li>Replace any occurrences of "<code>&</code>" in <var>markup</var> by
+ "<code>&amp;</code>".
+
+ </li><li>Replace any occurrences of "<code><</code>" in <var>markup</var> by
+ "<code>&lt;</code>".
+
+ </li><li>Replace any occurrences of "<code>></code>" in <var>markup</var> by
+ "<code>&gt;</code>".
+
+ </li><li>Return <var>data</var>.
+ </li></ol>
+ </dd><dt><code><a title="documentfragment" data-spec="DOM4" class="externalDFN">DocumentFragment</a></code>
+ </dt><dd><ol>
+ <li>Let <var>markup</var> the empty string.
+
+ </li><li>For each
+ <a title="concept-tree-child" data-spec="DOM4" class="externalDFN">child</a> of
+ <var>node</var>, in order,
+ <a class="internalDFN" href="#dfn-concept-serialize-xml" title="concept-serialize-xml">produce an XML serialization</a>
+ of the child and concatenate the result to <var>markup</var>.
+
+ </li><li>Return <var>markup</var>.
+ </li></ol>
+ </dd><dt><code><a title="documenttype" data-spec="DOM4" class="externalDFN">DocumentType</a></code>
+ </dt><dd>Run the steps to <a class="internalDFN" href="#dfn-concept-serialize-doctype" title="concept-serialize-doctype">produce a DocumentType
+ serialization</a> of <var>node</var>
+ and return the string this produced.
+
+ </dd><dt><code><a title="processinginstruction" data-spec="DOM4" class="externalDFN">ProcessingInstruction</a></code>
+ </dt><dd><ol>
+ <li>Let <var>markup</var> be the concatenation of "<code><?</code>",
+ <var>node</var>'s
+ <code><a title="dom-characterdata-data" data-spec="DOM4" class="externalDFN">data</a></code>,
+ and "<code>?></code>".
+
+ <!-- This does not actually appear to be the case in implementations today.
+ <p>If <var>data</var> doesn't match the
+ <code><a title="NT-PI" data-spec="XML10" class="externalDFN">PI</a></code> production, throw a
+ <code><a title=domexception data-spec="DOM4" class="externalDFN">DOMException</a></code>
+ with name <code>InvalidStateError</code> and terminate the entire algorithm.
+ -->
+
+ </li><li>Return <var>markup</var>.
+ </li></ol>
+ <div class="note"><div id="h_note_6" role="heading" aria-level="3" class="note-title"><span>Note</span></div><p class="">ProcessingInstruction objects may be created by the historical
+ <code>document.createProcessingInstruction</code> API, or as a result of parsing an
+ <a title="xml-document" data-spec="DOM4" class="externalDFN">XML document</a>.
+
+ </p></div></dd></dl>
+
+ <p>To <dfn id="dfn-concept-serialize-doctype" title="concept-serialize-doctype">produce a DocumentType serialization</dfn> of a
+ <a title="node" data-spec="DOM4" class="externalDFN">Node</a> <var>node</var>, the user agent
+ must return the result of the following algorithm:</p>
+
+ <ol>
+ <li>Let <var>markup</var> be an empty string.
+ </li><li>Append the string "<code><!DOCTYPE</code>" to <var>markup</var>.
+ </li><li>Append "<code> </code>" (U+0020 SPACE) to <var>markup</var>.
+ </li><li>Append the value of the <var>node</var>'s
+ <code><a title="dom-documenttype-name" data-spec="DOM4" class="externalDFN">name</a></code>
+ attribute to <var>markup</var>. For a <var>node</var> belonging to an
+ <a title="html-document" data-spec="DOM4" class="externalDFN">HTML document</a>,
+ the value will be all lowercase.
+ </li><li>If the <var>node</var>'s
+ <code><a title="dom-documenttype-publicid" data-spec="DOM4" class="externalDFN">publicId</a></code>
+ is not the empty string then append the following, in order, to <var>markup</var>:
+ <ol>
+ <li>"<code> </code>" (U+0020 SPACE);
+ </li><li>The string "<code>PUBLIC</code>";
+ </li><li>"<code> </code>" (U+0020 SPACE);
+ </li><li>"<code>"</code>" (U+0022 QUOTATION MARK);
+ </li><li>The value of the <var>node</var>'s
+ <code><a title="dom-documenttype-publicid" data-spec="DOM4" class="externalDFN">publicId</a></code>
+ attribute;
+ </li><li>"<code>"</code>" (U+0022 QUOTATION MARK);
+ </li></ol>
+ </li>
+ <li>If the <var>node</var>'s
+ <code><a title="dom-documenttype-systemid" data-spec="DOM4" class="externalDFN">systemId</a></code>
+ is not the empty string and the <var>node</var>'s
+ <code><a title="dom-documenttype-publicid" data-spec="DOM4" class="externalDFN">publicId</a></code>
+ is set to the empty string, then append the following, in order, to <var>markup</var>:
+ <ol>
+ <li>"<code> </code>" (U+0020 SPACE);
+ </li><li>The string "<code>SYSTEM</code>";
+ </li></ol>
+ </li>
+ <li>If the <var>node</var>'s
+ <code><a title="dom-documenttype-systemid" data-spec="DOM4" class="externalDFN">systemId</a></code>
+ is not the empty string then append the following, in order, to <var>markup</var>:
+ <ol>
+ <li>"<code> </code>" (U+0020 SPACE);
+ </li><li>"<code>"</code>" (U+0022 QUOTATION MARK);
+ </li><li>The value of the <var>node</var>'s
+ <code><a title="dom-documenttype-systemid" data-spec="DOM4" class="externalDFN">systemId</a></code>
+ attribute;
+ </li><li>"<code>"</code>" (U+0022 QUOTATION MARK);
+ </li></ol>
+ </li>
+ <li>Optional: if the <var>node</var> has an (historical)
+ <code><a title="ID-Core-DocType-internalSubset" data-spec="DOM3" class="externalDFN">internalSubset</a></code>
+ and the
+ <code><a title="ID-Core-DocType-internalSubset" data-spec="DOM3" class="externalDFN">internalSubset</a></code>
+ attribute's value is a non-empty string, then append the following,
+ in order, to <var>markup</var>:
+ <ol>
+ <li>"<code> </code>" (U+0020 SPACE);
+ </li><li>"<code>[</code>" (U+005B LEFT SQUARE BRACKET);
+ </li><li>The value of the <var>node</var>'s
+ <code><a title="ID-Core-DocType-internalSubset" data-spec="DOM3" class="externalDFN">internalSubset</a></code>
+ attribute;
+ </li><li>"<code>]</code>" (U+005D RIGHT SQUARE BRACKET);
+ </li></ol>
+ <div class="note"><div id="h_note_7" role="heading" aria-level="3" class="note-title"><span>Note</span></div><p class="">A <var>node</var> belonging to an
+ <a title="html-document" data-spec="DOM4" class="externalDFN">HTML document</a>
+ will never have an
+ <code><a title="ID-Core-DocType-internalSubset" data-spec="DOM3" class="externalDFN">internalSubset</a></code>
+ because any <code><a title="ID-Core-DocType-internalSubset" data-spec="DOM3" class="externalDFN">internalSubset</a></code>
+ markup is ignored by the parser.</p></div>
+ </li>
+ <li>Append "<code>></code>" (U+003E GREATER-THAN SIGN) to <var>markup</var>.
+ </li></ol>
+
+
+ <p>The <dfn id="dfn-concept-serialize-xml-attributes" title="concept-serialize-xml-attributes">XML serialization of the attributes</dfn>
+ of an <a title="concept-element" data-spec="DOM4" class="externalDFN">element</a>
+ <var>element</var> together with a prefix list <var>prefixes</var> is the result of the
+ following algorithm:
+
+ </p><ol>
+ <li>Let <var>result</var> be the empty string.
+ </li><li>For each
+ <a title="concept-attribute" data-spec="DOM4" class="externalDFN">attribute</a>
+ <var>attr</var> in <var>element</var>'s
+ <a title="concept-element-attribute" data-spec="DOM4" class="externalDFN">attributes</a>,
+ in order:
+ <ol>
+ <li>Append the following strings to <var>result</var>:
+ <ol>
+ <li>"<code> </code>" (U+0020 SPACE);
+ </li><li><var>attr</var>'s
+ <a title="concept-attribute-name" data-spec="DOM4" class="externalDFN">name</a>;
+ <!--<p class="issue">escaping / throwing NO issues here to my knowledge -->
+ </li><li>"<code>="</code>" (U+003D EQUALS SIGN, U+0022 QUOTATION MARK);
+ </li><li><var>attr</var>'s
+ <a title="concept-attribute-value" data-spec="DOM4" class="externalDFN">value</a>,
+ replacing any occurrences of the following:
+ <ol>
+ <li>"<code>"</code>" with "<code>&quot;</code>"
+ </li><li>"<code>&</code>" with "<code>&amp;</code>"
+ </li></ol>
+ </li><li>"<code>"</code>" (U+0022 QUOTATION MARK).
+ </li></ol>
+ </li><li>If the first six characters of the value of <var>attr</var>'s
+ <a title="concept-attribute-name" data-spec="DOM4" class="externalDFN">name</a>
+ attribute case-sensitively match the string "<code>xmlns:</code>", then:
+ <ol>
+ <li>Let <var>prefix definition</var> be the result of trimming
+ "<code>xmlns:</code>" from the beginning of the value of <var>attr</var>'s
+ <a title="concept-attribute-name" data-spec="DOM4" class="externalDFN">name</a>.
+ </li><li>Add the value of <var>prefix definition</var> to <var>prefixes</var>.
+ Since this namespace prefix definition has been serialized, it is
+ unnecessary to serialize it again if subsequently encountered in
+ <var>element</var>'s children.
+ </li></ol>
+ </li></ol>
+ </li><li>Return <var>result</var>.
+ </li></ol>
+ </section>
+</section>
+
+<section id="the-domparser-interface">
+ <!--OddPage--><h2 id="h2_the-domparser-interface" role="heading" aria-level="1"><span class="secno">4. </span>The <code>DOMParser</code> interface</h2>
+
+<pre class="extraidl">enum <span class="idlInterfaceID">SupportedType</span> {
+ "text/html",
+ "text/xml",
+ "application/xml",
+ "application/xhtml+xml",
+ "image/svg+xml"
+};</pre>
+
+ <p>The <dfn id="dfn-dom-domparser" title="dom-DOMParser"><code>DOMParser()</code></dfn> constructor
+ must return a new <code>DOMParser</code> object.
+
+ </p><pre class="idl"><span class="idlInterface" id="idl-def-DOMParser">[<span class="extAttr">Constructor</span>]
+interface <span class="idlInterfaceID">DOMParser</span> {
+<span class="idlMethod"> <span class="idlMethType">Document</span> <span class="idlMethName"><a href="#widl-DOMParser-parseFromString-Document-DOMString-str-SupportedType-type">parseFromString</a></span> (<span class="idlParam"><span class="idlParamType">DOMString</span> <span class="idlParamName">str</span></span>, <span class="idlParam"><span class="idlParamType">SupportedType</span> <span class="idlParamName">type</span></span>);</span>
+};</span></pre><section id="methods"><h3 id="h3_methods" role="heading" aria-level="2"><span class="secno">4.1 </span>Methods</h3><dl class="methods"><dt id="widl-DOMParser-parseFromString-Document-DOMString-str-SupportedType-type"><code>parseFromString</code></dt><dd>
+ <p>The
+ <dfn id="dfn-dom-domparser-parsefromstring" title="dom-DOMParser-parseFromString"><code>parseFromString(<var>str</var>, <var>type</var>)</code></dfn>
+ method must run these steps, depending on <var>type</var>:
+
+ </p><dl class="switch">
+ <dt>"<code>text/html</code>"
+ </dt><dd>
+ <p>Parse <var>str</var> with an
+ <code><a data-spec="HTML5" title="html-parser" class="externalDFN">HTML parser</a></code>, and return the newly
+ created <a title="concept-document" data-spec="DOM4" class="externalDFN">document</a>.
+
+ </p><p>The <a data-spec="HTML5" title="scripting-flag" class="externalDFN">scripting flag</a> must be set to
+ "disabled".
+
+ </p><div class="note"><div id="h_note_8" role="heading" aria-level="3" class="note-title"><span>Note</span></div><p class=""><code><a data-spec="HTML5" title="meta" class="externalDFN">meta</a></code> elements are not
+ taken into account for the encoding used, as a Unicode stream is passed into
+ the parser.
+
+ </p></div><div class="note"><div id="h_note_9" role="heading" aria-level="3" class="note-title"><span>Note</span></div><p class=""><code><a data-spec="HTML5" title="script" class="externalDFN">script</a></code> elements get marked
+ unexecutable and the contents of <code><a data-spec="HTML5" title="noscript" class="externalDFN">noscript</a></code>
+ get parsed as markup.
+
+ </p></div></dd><dt>"<code>text/xml</code>"
+ </dt><dt>"<code>application/xml</code>"
+ </dt><dt>"<code>application/xhtml+xml</code>"
+ </dt><dt>"<code>image/svg+xml</code>"
+ </dt><dd>
+ <ol>
+ <li>Parse <var>str</var> with a namespace-enabled
+ <code><a data-spec="HTML5" title="xml-parser" class="externalDFN">XML parser</a></code>.
+
+ </li><li>If the previous step didn't return an error, return the newly
+ created <a title="concept-document" data-spec="DOM4" class="externalDFN">document</a>
+ and terminate these steps.
+
+ </li><li>Otherwise, throw a
+ <a data-spec="DOM4" title="domexception" class="externalDFN">DOMException</a>
+ with name <code>SyntaxError</code>.
+
+ <div class="note"><div id="h_note_10" role="heading" aria-level="3" class="note-title"><span>Note</span></div><p class="">Some UAs do not throw an exception, but rather return a minimal
+ well-formed XML document that describes the error. In these cases, the error
+ document's root element will be named <code>parsererror</code> and its namespace
+ will be set to "<code>http://www.mozilla.org/newlayout/xml/parsererror.xml</code>".
+
+ <!--
+ It does not make sense to pave the cow paths by standardizing the
+ mozilla error handling approach, when there is clear objection to that approach
+ from web developers who expect success to load the document they want, rather
+ than an error document. Browsers are reluctant to change behavior due to web
+ compatibility, but IE has thrown in these cases for multiple releases now without
+ any significant compatibility impact, and thus it seems feasable to spec the
+ simpler and developer-expected behavior here.
+ appropriate behavior here.
+
+ <li>Let <var>document</var> be a newly-created
+ <code><a data-spec="DOM4" title="xmldocument" class="externalDFN">XMLDocument</a></code>.
+
+ <li>
+ <p>Let <var>root</var> be a new
+ <code><a title="element" data-spec="DOM4" class="externalDFN">Element</a></code>, with its
+ <a title=concept-element-local-name data-spec="DOM4" class="externalDFN">local name</a>
+ set to "<code>parsererror</code>" and its
+ <a title=concept-element-namespace data-spec="DOM4" class="externalDFN">namespace</a>
+ set to
+ "<code>http://www.mozilla.org/newlayout/xml/parsererror.xml</code>".
+ <!-- see https://bugzilla.mozilla.org/show_bug.cgi?id=45566 --><!--
+ <p>At this point user agents may
+ <a data-spec="DOM4" title=concept-node-append class="externalDFN">append</a> nodes
+ to <var>root</var>, for example to describe the nature of the
+ error.
+
+ <li><a data-spec="DOM4" title="concept-node-append" class="externalDFN">Append</a>
+ <var>root</var> to <var>document</var>.
+
+ <li>Return <var>document</var>.
+ -->
+ </p></div></li></ol>
+ </dd></dl>
+
+ <p>In any case, the returned
+ <a title="concept-document" data-spec="DOM4" class="externalDFN">document</a>'s
+ <a title="concept-document-content-type" data-spec="DOM4" class="externalDFN">content type</a>
+ must be the <var>type</var> argument. Additionally, the
+ <a title="concept-document" data-spec="DOM4" class="externalDFN">document</a> must have a
+ <a title="concept-document-url" data-spec="DOM4" class="externalDFN">URL</a> value equal to
+ the URL of the
+ <a title="active-document" data-spec="HTML5" class="externalDFN">active document</a>, a
+ <a title="location" data-spec="HTML5" class="externalDFN">location</a> value of <code>null</code>.
+
+ </p><div class="note"><div id="h_note_11" role="heading" aria-level="3" class="note-title"><span>Note</span></div><p class="">The returned
+ <a title="concept-document" data-spec="DOM4" class="externalDFN">document</a>'s
+ <a title="concept-document-encoding" data-spec="DOM4" class="externalDFN">encoding</a> is
+ the default, UTF-8.
+ </p></div><table class="parameters"><tbody><tr><th>Parameter</th><th>Type</th><th>Nullable</th><th>Optional</th><th>Description</th></tr><tr><td class="prmName">str</td><td class="prmType"><code>DOMString</code></td><td class="prmNullFalse"><span role="img" aria-label="False">✘</span></td><td class="prmOptFalse"><span role="img" aria-label="False">✘</span></td><td class="prmDesc"></td></tr><tr><td class="prmName">type</td><td class="prmType"><code>SupportedType</code></td><td class="prmNullFalse"><span role="img" aria-label="False">✘</span></td><td class="prmOptFalse"><span role="img" aria-label="False">✘</span></td><td class="prmDesc"></td></tr></tbody></table><div><em>Return type: </em><code>Document</code></div></dd></dl></section>
+</section>
+
+<section id="the-xmlserializer-interface">
+ <!--OddPage--><h2 id="h2_the-xmlserializer-interface" role="heading" aria-level="1"><span class="secno">5. </span>The <code>XMLSerializer</code> interface</h2>
+
+ <p>The <dfn id="dfn-dom-xmlserializer" title="dom-XMLSerializer"><code>XMLSerializer()</code></dfn>
+ constructor must return a new <code>XMLSerializer</code> object.
+
+ </p><pre class="idl"><span class="idlInterface" id="idl-def-XMLSerializer">[<span class="extAttr">Constructor</span>]
+interface <span class="idlInterfaceID">XMLSerializer</span> {
+<span class="idlMethod"> <span class="idlMethType">DOMString</span> <span class="idlMethName"><a href="#widl-XMLSerializer-serializeToString-DOMString-Node-root">serializeToString</a></span> (<span class="idlParam"><span class="idlParamType">Node</span> <span class="idlParamName">root</span></span>);</span>
+};</span></pre><section id="methods-1"><h3 id="h3_methods-1" role="heading" aria-level="2"><span class="secno">5.1 </span>Methods</h3><dl class="methods"><dt id="widl-XMLSerializer-serializeToString-DOMString-Node-root"><code>serializeToString</code></dt><dd>The <code>serializeToString(<var>root</var>)</code>
+ method must <a class="internalDFN" href="#dfn-concept-serialize-xml" title="concept-serialize-xml">produce an XML serialization</a> of <var>root</var> and return the result.<table class="parameters"><tbody><tr><th>Parameter</th><th>Type</th><th>Nullable</th><th>Optional</th><th>Description</th></tr><tr><td class="prmName">root</td><td class="prmType"><code>Node</code></td><td class="prmNullFalse"><span role="img" aria-label="False">✘</span></td><td class="prmOptFalse"><span role="img" aria-label="False">✘</span></td><td class="prmDesc"></td></tr></tbody></table><div><em>Return type: </em><code>DOMString</code></div></dd></dl></section>
+</section>
+
+<section id="extensions-to-the-element-interface">
+ <!--OddPage--><h2 id="h2_extensions-to-the-element-interface" role="heading" aria-level="1"><span class="secno">6. </span>Extensions to the <code><a title="element" data-spec="DOM4" class="externalDFN">Element</a></code> interface</h2>
+
+ <pre class="idl"><span class="idlInterface" id="idl-def-Element">partial interface <span class="idlInterfaceID">Element</span> {
+<span class="idlAttribute"> [<span class="extAttr">TreatNullAs=EmptyString</span>]
+ attribute <span class="idlAttrType">DOMString</span> <span class="idlAttrName"><a href="#widl-Element-innerHTML">innerHTML</a></span>;</span>
+<span class="idlAttribute"> [<span class="extAttr">TreatNullAs=EmptyString</span>]
+ attribute <span class="idlAttrType">DOMString</span> <span class="idlAttrName"><a href="#widl-Element-outerHTML">outerHTML</a></span>;</span>
+<span class="idlMethod"> <span class="idlMethType">void</span> <span class="idlMethName"><a href="#widl-Element-insertAdjacentHTML-void-DOMString-position-DOMString-text">insertAdjacentHTML</a></span> (<span class="idlParam"><span class="idlParamType">DOMString</span> <span class="idlParamName">position</span></span>, <span class="idlParam"><span class="idlParamType">DOMString</span> <span class="idlParamName">text</span></span>);</span>
+};</span></pre><section id="attributes"><h3 id="h3_attributes" role="heading" aria-level="2"><span class="secno">6.1 </span>Attributes</h3><dl class="attributes"><dt id="widl-Element-innerHTML"><code>innerHTML</code> of type <span class="idlAttrType">DOMString</span>, </dt><dd>
+ <p>The <dfn id="dfn-dom-element-innerhtml" title="dom-Element-innerHTML"><code>innerHTML</code></dfn> IDL
+ attribute represents the markup of the
+ <code><a title="element" data-spec="DOM4" class="externalDFN">Element</a></code>'s contents.
+
+ </p><dl class="domintro">
+ <!--doc.ih
+ <dt><var>document</var> . <code title=dom-Document-innerHTML>innerHTML</code> [ = <var>value</var> ]
+ <dd>
+ <p>Returns a fragment of HTML or XML that represents the
+ <code><a title="document" data-spec="DOM4" class="externalDFN">Document</a></code>.
+
+ <p>Can be set, to replace the
+ <code><a title="document" data-spec="DOM4" class="externalDFN">Document</a></code>'s contents with the result of
+ parsing the given string.
+
+ <p>In the case of an <a title="xml-document" data-spec="DOM4" class="externalDFN">XML document</a>,
+ will throw an
+ <code><a data-spec="DOM4" title=domexception class="externalDFN">DOMException</a></code> with name <code>InvalidStateError</code>
+ if the <code><a title="document" data-spec="DOM4" class="externalDFN">Document</a></code> cannot be serialized
+ to XML, and a
+ <code><a data-spec="DOM4" title=domexception class="externalDFN">DOMException</a></code> with name <code>SyntaxError</code>
+ if the given string is not well-formed.
+ -->
+
+ <dt><var>element</var> . <code title="dom-Element-innerHTML">innerHTML</code> [ = <var>value</var> ]
+ </dt><dd>
+ <p>Returns a fragment of HTML or XML that represents the element's
+ contents.
+
+ </p><p>Can be set, to replace the contents of the element with nodes
+ parsed from the given string.
+
+ </p><p>In the case of an <a title="xml-document" data-spec="DOM4" class="externalDFN">XML document</a>,
+ will throw a
+ <code><a data-spec="DOM4" title="domexception" class="externalDFN">DOMException</a></code> with name <code>InvalidStateError</code>
+ if the <code><a title="element" data-spec="DOM4" class="externalDFN">Element</a></code> cannot be serialized
+ to XML, and a
+ <code><a data-spec="DOM4" title="domexception" class="externalDFN">DOMException</a></code> with name <code>SyntaxError</code>
+ if the given string is not well-formed.
+ </p></dd></dl>
+
+ <p>On getting, if the <a class="internalDFN" href="#dfn-context-object" title="context object">context object</a>'s
+ <a title="concept-node-document" data-spec="DOM4" class="externalDFN">node document</a>
+ is an <a title="html-document" data-spec="DOM4" class="externalDFN">HTML document</a>, then the attribute
+ must return the result of running the
+ <a data-spec="HTML5" title="html-fragment-serialization-algorithm" class="externalDFN">HTML fragment serialization algorithm</a> on the
+ <a class="internalDFN" href="#dfn-context-object" title="context object">context object</a>; otherwise, the <a class="internalDFN" href="#dfn-context-object" title="context object">context object</a>'s
+ <a title="concept-node-document" data-spec="DOM4" class="externalDFN">node document</a>
+ is an <a title="xml-document" data-spec="DOM4" class="externalDFN">XML document</a>, and the attribute must
+ return the result of running the
+ <a data-spec="HTML5" title="xml-fragment-serialization-algorithm" class="externalDFN">XML fragment serialization algorithm</a> on the
+ <a class="internalDFN" href="#dfn-context-object" title="context object">context object</a> instead (this might throw an
+ exception instead of returning a string).
+
+ </p><p>On setting, these steps must be run:
+
+ </p><ol>
+ <li>Let <var>fragment</var> be the result of invoking the
+ <a class="internalDFN" href="#dfn-concept-parse-fragment" title="concept-parse-fragment">fragment parsing algorithm</a> with
+ the new value as <var>markup</var>, and the
+ <a class="internalDFN" href="#dfn-context-object" title="context object">context object</a> as the <var>context element</var>.
+
+ </li><li><a data-spec="DOM4" title="concept-node-replace-all" class="externalDFN">Replace all</a>
+ with <var>fragment</var> within the <a class="internalDFN" href="#dfn-context-object" title="context object">context object</a>.
+ </li></ol>
+ </dd><dt id="widl-Element-outerHTML"><code>outerHTML</code> of type <span class="idlAttrType">DOMString</span>, </dt><dd>
+ <p>The <dfn id="dfn-dom-element-outerhtml" title="dom-Element-outerHTML"><code>outerHTML</code></dfn> IDL
+ attribute represents the markup of the
+ <code><a title="element" data-spec="DOM4" class="externalDFN">Element</a></code> and its contents.
+
+ </p><dl class="domintro">
+ <dt><var>element</var> . <code title="dom-Element-outerHTML">outerHTML</code> [ = <var>value</var> ]
+ </dt><dd>
+ <p>Returns a fragment of HTML or XML that represents the element and its
+ contents.
+
+ </p><p>Can be set, to replace the element with nodes parsed from the given
+ string.
+
+ </p><p>In the case of an <a title="xml-document" data-spec="DOM4" class="externalDFN">XML document</a>,
+ will throw a
+ <code><a data-spec="DOM4" title="domexception" class="externalDFN">DOMException</a></code> with name <code>InvalidStateError</code>
+ if the element cannot be serialized to XML, and a
+ <code><a data-spec="DOM4" title="domexception" class="externalDFN">DOMException</a></code> with name <code>SyntaxError</code>
+ if the given string is not well-formed.
+
+ </p><p>Throws a
+ <code><a data-spec="DOM4" title="domexception" class="externalDFN">DOMException</a></code> with name <code>NoModificationAllowedError</code>
+ if the parent of the element is the
+ <code><a title="document" data-spec="DOM4" class="externalDFN">Document</a></code> node.
+ </p></dd></dl>
+
+ <p>On getting, if the <a class="internalDFN" href="#dfn-context-object" title="context object">context object</a>'s
+ <a title="concept-node-document" data-spec="DOM4" class="externalDFN">node document</a>
+ is an <a title="html-document" data-spec="DOM4" class="externalDFN">HTML document</a>, then the attribute
+ must return the result of running the
+ <a data-spec="HTML5" title="html-fragment-serialization-algorithm" class="externalDFN">HTML fragment serialization algorithm</a> on a
+ fictional node whose only child is <a class="internalDFN" href="#dfn-context-object" title="context object">context object</a>; otherwise, the
+ <a class="internalDFN" href="#dfn-context-object" title="context object">context object</a>'s
+ <a title="concept-node-document" data-spec="DOM4" class="externalDFN">node document</a>
+ is an <a title="xml-document" data-spec="DOM4" class="externalDFN">XML document</a>, and the attribute must
+ return the result of running the
+ <a data-spec="HTML5" title="xml-fragment-serialization-algorithm" class="externalDFN">XML fragment serialization algorithm</a> on that
+ fictional node instead (this might throw an exception instead of returning a
+ string).
+
+ </p><p>On setting, the following steps must be run:
+
+ </p><ol>
+ <li>Let <var>parent</var> be the <a class="internalDFN" href="#dfn-context-object" title="context object">context object</a>'s
+ <a data-spec="DOM4" title="concept-tree-parent" class="externalDFN">parent</a>.
+
+ </li><li>If <var>parent</var> is null, terminate these steps. There would be no
+ way to obtain a reference to the nodes created even if the remaining steps
+ were run.
+
+ </li><li>If <var>parent</var> is a
+ <code><a title="document" data-spec="DOM4" class="externalDFN">Document</a></code>, throw a
+ <code><a data-spec="DOM4" title="domexception" class="externalDFN">DOMException</a></code> with name <code>NoModificationAllowedError</code>
+ exception and terminate these steps.
+
+ </li><li>If <var>parent</var> is a
+ <code><a title="documentfragment" data-spec="DOM4" class="externalDFN">DocumentFragment</a></code>, let
+ <var>parent</var> be a new
+ <code><a title="element" data-spec="DOM4" class="externalDFN">Element</a></code> with
+
+ <ul>
+ <li><code>body</code> as its
+ <a data-spec="DOM4" title="concept-element-local-name" class="externalDFN">local name</a>,
+
+ </li><li>the <a data-spec="DOM4" title="html-namespace" class="externalDFN">HTML namespace</a> as its
+ <a data-spec="DOM4" title="concept-element-namespace" class="externalDFN">namespace</a>, and
+ </li><li>the <a class="internalDFN" href="#dfn-context-object" title="context object">context object</a>'s
+ <a title="concept-node-document" data-spec="DOM4" class="externalDFN">node document</a>
+ as its
+ <a title="concept-node-document" data-spec="DOM4" class="externalDFN">node document</a>.
+ </li></ul>
+
+ </li><li>Let <var>fragment</var> be the result of invoking the
+ <a class="internalDFN" href="#dfn-concept-parse-fragment" title="concept-parse-fragment">fragment parsing algorithm</a> with
+ the new value as <var>markup</var>, and <var>parent</var> as
+ the <var>context element</var>.
+
+ </li><li><a data-spec="DOM4" title="concept-node-replace" class="externalDFN">Replace</a>
+ the <a class="internalDFN" href="#dfn-context-object" title="context object">context object</a> with <var>fragment</var> within
+ the <a class="internalDFN" href="#dfn-context-object" title="context object">context object</a>'s
+ <a data-spec="DOM4" title="concept-tree-parent" class="externalDFN">parent</a>.
+ </li></ol>
+ </dd></dl></section><section id="methods-2"><h3 id="h3_methods-2" role="heading" aria-level="2"><span class="secno">6.2 </span>Methods</h3><dl class="methods"><dt id="widl-Element-insertAdjacentHTML-void-DOMString-position-DOMString-text"><code>insertAdjacentHTML</code></dt><dd>
+ <dl class="domintro">
+ <dt><var>element</var> . <code title="dom-Element-insertAdjacentHTML">insertAdjacentHTML</code>(<var>position</var>, <var>text</var>)
+
+ </dt><dd>
+ <p>Parses the given string <var>text</var> as HTML or XML and inserts
+ the resulting nodes into the tree in the position given by the
+ <var>position</var> argument, as follows:
+
+ </p><dl>
+ <dt>"beforebegin"
+ </dt><dd>Before the element itself.
+
+ </dd><dt>"afterbegin"
+ </dt><dd>Just inside the element, before its first child.
+
+ </dd><dt>"beforeend"
+ </dt><dd>Just inside the element, after its last child.
+
+ </dd><dt>"afterend"
+ </dt><dd>After the element itself.
+ </dd></dl>
+
+ <p>Throws a <code>SyntaxError</code> exception if the arguments have invalid values (e.g., in the case of an
+ <a data-spec="DOM4" title="XML-document" class="externalDFN">XML document</a>, if the given string is
+ not well-formed).
+
+ </p><p>Throws a
+ <code><a data-spec="DOM4" title="domexception" class="externalDFN">DOMException</a></code> with name <code>NoModificationAllowedError</code>
+ if the given position isn't possible (e.g. inserting elements
+ after the root element of a <code><a title="document" data-spec="DOM4" class="externalDFN">Document</a></code>).
+ </p></dd></dl>
+
+ <p>The
+ <dfn id="dfn-dom-element-insertadjacenthtml" title="dom-Element-insertAdjacentHTML"><code>insertAdjacentHTML(<var>position</var>, <var>text</var>)</code></dfn>
+ method must run these steps:
+
+ </p><ol>
+ <li>Use the first matching item from this list:
+
+ <dl class="switch">
+ <dt>If <var>position</var> is an
+ <a data-spec="DOM4" class="externalDFN" title="ascii-case-insensitive">ASCII case-insensitive</a> match for
+ the string "beforebegin"
+
+ </dt><dt>If <var>position</var> is an
+ <a data-spec="DOM4" class="externalDFN" title="ascii-case-insensitive">ASCII case-insensitive</a> match for
+ the string "afterend"
+
+ </dt><dd>
+ <p>Let <var>context</var> be the <a class="internalDFN" href="#dfn-context-object" title="context object">context object</a>'s
+ <a data-spec="DOM4" title="concept-tree-parent" class="externalDFN">parent</a>.
+
+ </p><p>If <var>context</var> is null or a
+ <a data-spec="DOM4" class="externalDFN" title="concept-document">document</a>, throw
+ a
+ <code><a data-spec="DOM4" title="domexception" class="externalDFN">DOMException</a></code> with name <code>NoModificationAllowedError</code>
+ and terminate these steps.
+
+ </p></dd><dt>If <var>position</var> is an
+ <a data-spec="DOM4" class="externalDFN" title="ascii-case-insensitive">ASCII case-insensitive</a> match for
+ the string "afterbegin"
+
+ </dt><dt>If <var>position</var> is an
+ <a data-spec="DOM4" class="externalDFN" title="ascii-case-insensitive">ASCII case-insensitive</a> match for
+ the string "beforeend"
+
+ </dt><dd>Let <var>context</var> be the <a class="internalDFN" href="#dfn-context-object" title="context object">context object</a>.
+
+ </dd><dt>Otherwise
+ </dt><dd>
+ <p>Throw a <code>SyntaxError</code> exception.
+ </p></dd></dl>
+
+ </li><li>If <var>context</var> is not an
+ <code><a title="element" data-spec="DOM4" class="externalDFN">Element</a></code> or the following are all true:
+
+ <ul>
+ <li><var>context</var>'s
+ <a title="concept-node-document" data-spec="DOM4" class="externalDFN">node document</a>
+ is an <a title="html-document" data-spec="DOM4" class="externalDFN">HTML document</a>,
+
+ </li><li><var>context</var>'s
+ <a data-spec="DOM4" title="concept-element-local-name" class="externalDFN">local name</a>
+ is "<code>html</code>", and
+
+ </li><li><var>context</var>'s
+ <a data-spec="DOM4" title="concept-element-namespace" class="externalDFN">namespace</a>
+ is the <a data-spec="DOM4" title="html-namespace" class="externalDFN">HTML namespace</a>;
+ </li></ul>
+
+ <p>let <var>context</var> be a new
+ <code><a title="element" data-spec="DOM4" class="externalDFN">Element</a></code> with
+
+ </p><ul>
+ <li><code>body</code> as its
+ <a data-spec="DOM4" title="concept-element-local-name" class="externalDFN">local name</a>,
+
+ </li><li>the <a data-spec="DOM4" title="html-namespace" class="externalDFN">HTML namespace</a> as its
+ <a data-spec="DOM4" title="concept-element-namespace" class="externalDFN">namespace</a>, and
+
+ </li><li>the <a class="internalDFN" href="#dfn-context-object" title="context object">context object</a>'s
+ <a title="concept-node-document" data-spec="DOM4" class="externalDFN">node document</a>
+ as its
+ <a title="concept-node-document" data-spec="DOM4" class="externalDFN">node document</a>.
+ </li></ul>
+
+ </li><li>Let <var>fragment</var> be the result of invoking the
+ <a class="internalDFN" href="#dfn-concept-parse-fragment" title="concept-parse-fragment">fragment parsing algorithm</a> with <var>text</var> as
+ <var>markup</var>, and <var>parent</var> as the <var>context element</var>.
+
+ </li><li>Use the first matching item from this list:
+
+ <dl class="switch">
+ <dt>If <var>position</var> is an
+ <a data-spec="DOM4" class="externalDFN" title="ascii-case-insensitive">ASCII case-insensitive</a> match for
+ the string "beforebegin"
+
+ </dt><dd><a data-spec="DOM4" title="concept-node-insert" class="externalDFN">Insert</a>
+ <var>fragment</var> into the <a class="internalDFN" href="#dfn-context-object" title="context object">context object</a>'s
+ <a data-spec="DOM4" title="concept-tree-parent" class="externalDFN">parent</a>
+ before the <a class="internalDFN" href="#dfn-context-object" title="context object">context object</a>.
+
+ </dd><dt>If <var>position</var> is an
+ <a data-spec="DOM4" class="externalDFN" title="ascii-case-insensitive">ASCII case-insensitive</a> match for
+ the string "afterbegin"
+
+ </dt><dd><a data-spec="DOM4" title="concept-node-insert" class="externalDFN">Insert</a>
+ <var>fragment</var> into the <a class="internalDFN" href="#dfn-context-object" title="context object">context object</a>
+ before its
+ <a data-spec="DOM4" title="concept-tree-first-child" class="externalDFN">first child</a>.
+
+ </dd><dt>If <var>position</var> is an
+ <a data-spec="DOM4" class="externalDFN" title="ascii-case-insensitive">ASCII case-insensitive</a> match for
+ the string "beforeend"
+
+ </dt><dd><a data-spec="DOM4" title="concept-node-append" class="externalDFN">Append</a>
+ <var>fragment</var> to the <a class="internalDFN" href="#dfn-context-object" title="context object">context object</a>.
+
+ </dd><dt>If <var>position</var> is an
+ <a data-spec="DOM4" class="externalDFN" title="ascii-case-insensitive">ASCII case-insensitive</a> match for
+ the string "afterend"
+
+ </dt><dd><a data-spec="DOM4" title="concept-node-insert" class="externalDFN">Insert</a>
+ <var>fragment</var> into the <a class="internalDFN" href="#dfn-context-object" title="context object">context object</a>'s
+ <a data-spec="DOM4" title="concept-tree-parent" class="externalDFN">parent</a>
+ before the <a class="internalDFN" href="#dfn-context-object" title="context object">context object</a>'s
+ <a data-spec="DOM4" title="concept-tree-next-sibling" class="externalDFN">next sibling</a>.
+ </dd></dl>
+ </li></ol>
+ <table class="parameters"><tbody><tr><th>Parameter</th><th>Type</th><th>Nullable</th><th>Optional</th><th>Description</th></tr><tr><td class="prmName">position</td><td class="prmType"><code>DOMString</code></td><td class="prmNullFalse"><span role="img" aria-label="False">✘</span></td><td class="prmOptFalse"><span role="img" aria-label="False">✘</span></td><td class="prmDesc"></td></tr><tr><td class="prmName">text</td><td class="prmType"><code>DOMString</code></td><td class="prmNullFalse"><span role="img" aria-label="False">✘</span></td><td class="prmOptFalse"><span role="img" aria-label="False">✘</span></td><td class="prmDesc"></td></tr></tbody></table><div><em>Return type: </em><code>void</code></div></dd></dl></section>
+</section>
+
+<!-- Dropping this extention as it is not implemented, nor does it appear that any browser
+ is currently interested in supporting it. Perhaps it can come back in a V2 of this spec
+ if browsers become interested.
+<section>
+ <h1>Extensions to the <code><a title="text" data-spec="DOM4" class="externalDFN">Text</a></code> interface</h1>
+
+ <dl class="idl" title="partial interface Text">
+ <dt>attribute boolean serializeAsCDATA</dt>
+ <dd>
+ <dl class=domintro>
+ <dt><var>text</var> .
+ <code title=dom-Text-serializeAsCDATA>serializeAsCDATA</code> [ = <var>value</var> ]
+ <dd>Controls whether, in XML, this node is serialized as a CDATA section.
+ </dl>
+
+ <p><code><a title="text" data-spec="DOM4" class="externalDFN">Text</a></code> nodes have an additional
+ associated flag, the <dfn>serialize as CDATA flag</dfn>.
+
+ <p>The
+ <dfn title=dom-Text-serializeAsCDATA><code>serializeAsCDATA</code></dfn>
+ attribute must return true if the <a title="context object">context object</a> has its
+ <a>serialize as CDATA flag</a> set, or false otherwise.
+
+ <p>Setting the <code title=dom-Text-serializeAsCDATA>serializeAsCDATA</code>
+ attribute must, if the new value is true, set the
+ <a title="context object">context object</a>'s <a>serialize as CDATA flag</a>, or unset
+ it otherwise.
+ </dd>
+ </dl>
+</section>
+-->
+
+<section id="extensions-to-the-range-interface">
+ <!--OddPage--><h2 id="h2_extensions-to-the-range-interface" role="heading" aria-level="1"><span class="secno">7. </span>Extensions to the <code><a data-spec="DOM4" title="range" class="externalDFN">Range</a></code> interface</h2>
+
+ <pre class="idl"><span class="idlInterface" id="idl-def-Range">partial interface <span class="idlInterfaceID">Range</span> {
+<span class="idlMethod"> <span class="idlMethType">DocumentFragment</span> <span class="idlMethName"><a href="#widl-Range-createContextualFragment-DocumentFragment-DOMString-fragment">createContextualFragment</a></span> (<span class="idlParam"><span class="idlParamType">DOMString</span> <span class="idlParamName">fragment</span></span>);</span>
+};</span></pre><section id="methods-3"><h3 id="h3_methods-3" role="heading" aria-level="2"><span class="secno">7.1 </span>Methods</h3><dl class="methods"><dt id="widl-Range-createContextualFragment-DocumentFragment-DOMString-fragment"><code>createContextualFragment</code></dt><dd>
+ <dl class="domintro">
+ <dt><var>fragment</var> = <var>range</var> . <code title="dom-Range-createContextualFragment">createContextualFragment</code>(<var>fragment</var>)
+ </dt><dd>Returns a <code><a title="documentfragment" data-spec="DOM4" class="externalDFN">DocumentFragment</a></code>, created
+ from the markup string given.
+ </dd></dl>
+
+ <p>The
+ <dfn id="dfn-dom-range-createcontextualfragment" title="dom-Range-createContextualFragment"><code>createContextualFragment(<var>fragment</var>)</code></dfn>
+ method must run these steps:
+
+ </p><ol>
+ <li>Let <var>node</var> the <a class="internalDFN" href="#dfn-context-object" title="context object">context object</a>'s
+ <a data-spec="DOM4" title="concept-range-start-node" class="externalDFN">start node</a>.
+
+ <p>Let <var>element</var> be as follows, depending on <var>node</var>'s interface:
+
+ </p><dl class="switch">
+ <dt><code><a title="document" data-spec="DOM4" class="externalDFN">Document</a></code>
+ </dt><dt><code><a title="documentfragment" data-spec="DOM4" class="externalDFN">DocumentFragment</a></code>
+ </dt><dd>null
+
+ </dd><dt><code><a title="element" data-spec="DOM4" class="externalDFN">Element</a></code>
+ </dt><dd><var>node</var>
+
+ </dd><dt><code><a title="text" data-spec="DOM4" class="externalDFN">Text</a></code>
+ </dt><dt><code><a title="comment" data-spec="DOM4" class="externalDFN">Comment</a></code>
+ </dt><dd><var>node</var>'s
+ <a data-spec="DOM4" class="externalDFN" title="parent-element">parent element</a>
+
+ </dd><dt><code><a title="documenttype" data-spec="DOM4" class="externalDFN">DocumentType</a></code>
+ </dt><dt><code><a title="processinginstruction" data-spec="DOM4" class="externalDFN">ProcessingInstruction</a></code>
+ </dt><dd>[<cite><a href="#bib-DOM4" class="bibref">DOM4</a></cite>] prevents this case.
+ </dd></dl>
+
+ </li><li>If either <var>element</var> is null or the following are all true:
+
+ <ul>
+ <li><var>element</var>'s
+ <a title="concept-node-document" data-spec="DOM4" class="externalDFN">node document</a>
+ is an <a title="html-document" data-spec="DOM4" class="externalDFN">HTML document</a>,
+
+ </li><li><var>element</var>'s
+ <a data-spec="DOM4" title="concept-element-local-name" class="externalDFN">local name</a>
+ is "<code>html</code>", and
+
+ </li><li><var>element</var>'s
+ <a data-spec="DOM4" title="concept-element-namespace" class="externalDFN">namespace</a>
+ is the <a data-spec="DOM4" title="html-namespace" class="externalDFN">HTML namespace</a>;
+ </li></ul>
+
+ <p>let <var>element</var> be a new
+ <a data-spec="DOM4" title="concept-element" class="externalDFN">element</a> with
+
+ </p><ul>
+ <li>"<code>body</code>" as its
+ <a data-spec="DOM4" title="concept-element-local-name" class="externalDFN">local name</a>,
+
+ </li><li>the <a data-spec="DOM4" title="html-namespace" class="externalDFN">HTML namespace</a> as its
+ <a data-spec="DOM4" title="concept-element-namespace" class="externalDFN">namespace</a>, and
+
+ </li><li>the <a class="internalDFN" href="#dfn-context-object" title="context object">context object</a>'s
+ <a title="concept-node-document" data-spec="DOM4" class="externalDFN">node document</a>
+ as its
+ <a title="concept-node-document" data-spec="DOM4" class="externalDFN">node document</a>.
+ </li></ul>
+
+ </li><li>Let <var>fragment node</var> be the result of invoking the
+ <a class="internalDFN" href="#dfn-concept-parse-fragment" title="concept-parse-fragment">fragment parsing algorithm</a> with <var>fragment</var> as
+ <var>markup</var>, and <var>element</var> as the <var>context element</var>.
+
+ </li><li>Unmark all scripts in <var>fragment node</var> as "already started".
+
+ </li><li>Return <var>fragment node</var>.
+ </li></ol>
+ <table class="parameters"><tbody><tr><th>Parameter</th><th>Type</th><th>Nullable</th><th>Optional</th><th>Description</th></tr><tr><td class="prmName">fragment</td><td class="prmType"><code>DOMString</code></td><td class="prmNullFalse"><span role="img" aria-label="False">✘</span></td><td class="prmOptFalse"><span role="img" aria-label="False">✘</span></td><td class="prmDesc"></td></tr></tbody></table><div><em>Return type: </em><code>DocumentFragment</code></div></dd></dl></section>
+</section>
+
+<section id="acknowledgements" class="appendix">
+ <!--OddPage--><h2 id="h2_acknowledgements" role="heading" aria-level="1"><span class="secno">A. </span>Acknowledgements</h2>
+ <p>Thanks to Ms2ger [<a href="http://www.mozilla.org">Mozilla</a>] for maintaining the initial
+ drafts of this specification and for its continued improvement in the
+ <a href="http://domparsing.spec.whatwg.org/">Living Standard</a>.
+
+ </p><p>Thanks to Anne van Kesteren, Aryeh Gregor, Boris Zbarsky, Henri Sivonen, Simon Pieters and timeless
+ for their useful comments.
+
+ </p><p>Special thanks to Ian Hickson for defining the
+ <code title="dom-Element-innerHTML">innerHTML</code> and
+ <code title="dom-Element-outerHTML">outerHTML</code> attributes, and the
+ <code title="dom-Element-insertAdjacentHTML">insertAdjacentHTML()</code> method in
+ [<cite><a href="#bib-HTML5" class="bibref">HTML5</a></cite>] and his useful comments.
+</p></section>
+
+
+<section rel="bibo:Chapter" resource="#ref" typeof="bibo:Chapter" id="references" class="appendix"><!--OddPage--><h2 id="h2_references" role="heading" aria-level="1"><span class="secno">B. </span>References</h2><section rel="bibo:Chapter" resource="#ref" typeof="bibo:Chapter" id="normative-references"><h3 id="h3_normative-references" role="heading" aria-level="2"><span class="secno">B.1 </span>Normative references</h3><dl about="" class="bibliography"><dt id="bib-HTML5">[HTML5]</dt><dd rel="dcterms:requires">Robin Berjon; Steve Faulkner; Travis Leithead; Erika Doyle Navara; Edward O'Connor; Silvia Pfeiffer. <a href="http://www.w3.org/TR/html5/"><cite>HTML5</cite></a>. 6 August 2013. W3C Candidate Recommendation. URL: <a href="http://www.w3.org/TR/html5/">http://www.w3.org/TR/html5/</a>
+</dd><dt id="bib-RFC2119">[RFC2119]</dt><dd rel="dcterms:requires">S. Bradner. <a href="http://www.ietf.org/rfc/rfc2119.txt"><cite>Key words for use in RFCs to Indicate Requirement Levels.</cite></a> March 1997. Internet RFC 2119. URL: <a href="http://www.ietf.org/rfc/rfc2119.txt">http://www.ietf.org/rfc/rfc2119.txt</a>
+</dd><dt id="bib-WEBIDL">[WEBIDL]</dt><dd rel="dcterms:requires">Cameron McCormack. <a href="http://www.w3.org/TR/WebIDL/"><cite>Web IDL</cite></a>. 19 April 2012. W3C Candidate Recommendation. URL: <a href="http://www.w3.org/TR/WebIDL/">http://www.w3.org/TR/WebIDL/</a>
+</dd></dl></section><section rel="bibo:Chapter" resource="#ref" typeof="bibo:Chapter" id="informative-references"><h3 id="h3_informative-references" role="heading" aria-level="2"><span class="secno">B.2 </span>Informative references</h3><dl about="" class="bibliography"><dt id="bib-DOM4">[DOM4]</dt><dd rel="dcterms:references">Anne van Kesteren; Aryeh Gregor; Ms2ger; Alex Russell; Robin Berjon. <a href="http://www.w3.org/TR/dom/"><cite>W3C DOM4</cite></a>. 7 November 2013. W3C Working Draft. URL: <a href="http://www.w3.org/TR/dom/">http://www.w3.org/TR/dom/</a>
+</dd><dt id="bib-XML-NAMES">[XML-NAMES]</dt><dd rel="dcterms:references">Tim Bray; Dave Hollander; Andrew Layman; Richard Tobin; Henry Thompson et al. <a href="http://www.w3.org/TR/xml-names"><cite>Namespaces in XML 1.0 (Third Edition)</cite></a>. 8 December 2009. W3C Recommendation. URL: <a href="http://www.w3.org/TR/xml-names">http://www.w3.org/TR/xml-names</a>
+</dd><dt id="bib-XML10">[XML10]</dt><dd rel="dcterms:references">Tim Bray; Jean Paoli; Michael Sperberg-McQueen; Eve Maler; François Yergeau et al. <a href="http://www.w3.org/TR/xml"><cite>Extensible Markup Language (XML) 1.0 (Fifth Edition)</cite></a>. 26 November 2008. W3C Recommendation. URL: <a href="http://www.w3.org/TR/xml">http://www.w3.org/TR/xml</a>
+</dd></dl></section></section></body></html>
\ No newline at end of file