res*_*sle 7 javascript dom outerhtml
我创建了一个通用元素
var element = document.createElement(null);
document.body.appendChild(element);
Run Code Online (Sandbox Code Playgroud)
之后,使用 externalHTML 更改该元素
element.outerHTML = "<div> hello there </div>";
Run Code Online (Sandbox Code Playgroud)
元素正确显示。然而,变量本身“元素”并不以任何方式反映变化。检索该特定元素的唯一方法似乎是做类似的事情......
element.outerHTML = "<div id='hi'> hello there </div>";
element = document.getElementById("hi");
Run Code Online (Sandbox Code Playgroud)
看起来很丑。有没有更好的方法和/或我错过了什么?
考虑下面的代码片段:
var element = document.createElement(null);
console.log(element);
document.body.appendChild(element);
console.log(element);
element.outerHTML = "<div id='hi'> hello there </div>";
console.log(element);
element = document.getElementById("hi");
console.log(element);Run Code Online (Sandbox Code Playgroud)
您会注意到,引用是对原始元素的引用,而 afterouterHTML被使用。正如文档中所述:
此外,虽然该元素将在文档中被替换,但设置了outerHTML 属性的变量仍将保留对原始元素的引用。
document.getElementById()因此,最简单的方法是在设置后实际使用所说的id来获取创建的新元素,或者document.createElement()像这样使用来创建一个不太通用的对象并操作它innerHTML():
var element = document.createElement('div');
console.log(element);
element.innerHTML = ' hello there ';
document.body.appendChild(element);
console.log(element);Run Code Online (Sandbox Code Playgroud)
正如您所看到的,在上面的代码片段中,element更改其内容后是相同的。
更新:
使用一些创造性的技巧,您可以将您想要使用的内容添加innerHTML到您创建的通用元素中,然后抓取它firstChild并替换element,最后将其添加到您的文档中并保持选中状态。下面的示例向您展示了如何执行此操作:
var element = document.createElement(null);
element.innerHTML = '<div> hello there </div>';
element = element.firstChild;
document.body.appendChild(element);
console.log(element);Run Code Online (Sandbox Code Playgroud)