creating element node without appending

时间:2019-03-19 15:12:36

标签: javascript

in Javascript I wonder if I create an element without appending to child what will happen ? also what if I create the element from different doc and add it to new one ?

  var text, parser, xmlDoc;

text = "<bookstore></bookstore>";
var text2="<test/>";

parser = new DOMParser();
xmlDoc = parser.parseFromString(text,"text/xml");
xmlDoc2 = parser.parseFromString(text2,"text/xml");

var newElement=xmlDoc2.createElement("hello");

xmlDoc.getElementsByTagName("bookstore")[0].appendChild(newElement);
var oSerializer = new XMLSerializer();
var sXML = oSerializer.serializeToString(xmlDoc);
console.log(sXML);

I can't find why I need to use the same doc to create the element

1 个答案:

答案 0 :(得分:1)

您无需将元素附加到用于创建该元素的同一文档中。

createElement()创建一个元素,该元素由创建该文档的文档拥有,但未在文档中提供任何位置。如果需要,您当然可以创建一个元素而不必附加它。 appendChild()是在文档中为元素赋予位置的一种方法。

如果要处理多个文档(如代码示例中所示),则可以创建一个文档拥有的元素,并将其附加到另一个文档中,这将简单地将其从原始文档所有者中删除,将另一个文档设为所有者,并在其他文档中指定一个职位。

例如:

const astring = '<adoc></adoc>';
const bstring = '<bdoc></bdoc>';

const parser = new DOMParser();
const axml = parser.parseFromString(astring, 'application/xml');
const bxml = parser.parseFromString(bstring, 'application/xml');

let elem = axml.createElement('elem');
console.log(elem.ownerDocument.documentElement.tagName);
// adoc

bxml.querySelector('bdoc').appendChild(elem);
console.log(elem.ownerDocument.documentElement.tagName);
// bdoc