gpt4 book ai didi

JavaScript createDocumentFragment()

转载 作者:行者123 更新时间:2023-11-29 19:03:44 24 4
gpt4 key购买 nike

我对以下示例中的 createDocumentFragment() 有疑问:

<p>Click the button to make changes to a list item, using the createDocumentFragment method, then appending the list item as the last child of the list.</p>

<ul>
<li>Coffee</li>
<li>Tea</li>
</ul>

<button onclick="myFunction()">Try it</button>

<script>
function myFunction() {
var d = document.createDocumentFragment();
d.appendChild(document.getElementsByTagName("LI")[0]);
d.childNodes[0].childNodes[0].nodeValue = "Milk";
document.getElementsByTagName("UL")[0].appendChild(d);
}
</script>

来自: https://www.w3schools.com/jsref/tryit.asp?filename=tryjsref_document_createdocfrag

为什么是 childNodes[0].childNodes[0] 而不是只有一个 childNodes[0]

最佳答案

childNodes 是一个 NodeList (表现得非常像一个数组)包含特定节点的所有直接后代。

想象一下这样的结构:

<div id="a">
<div id="a_0">
<div id="a_0_0"></div>
<div id="a_0_1"></div>
</div>
<div id="a_1"></div>
</div>

现在,调用 document.getElementById("a") 将返回最外层的节点。

var a = document.getElementById("a");

console.log(a.childNodes[0].id); // would show "a_0"
console.log(a.childNodes[1].id); // would show "a_1"
console.log(a.childNodes[0].childNodes[0].id); // would show "a_0_0"

此外,节点中的文本也是一个单独的节点 (a Text node)。

想象一下这样的结构:

<div id="a">This is some text</div>

然后,再次使用上面的示例,您需要像这样访问文本:

var a = document.getElementById("a");
console.log(a.data) // Will log "undefined"
console.log(a.childNodes[0].data) // Will log "This is some text"

您可以使用快捷方式 firstChild 而不是 childNodes[0],它会返回相同的结果。

由于以下情况,这种将文本节点视为单独节点的行为是必要的:

<div id="a">This text contains <strong>strong</strong> text</div>

这里,节点 a 有三个子节点:一个文本节点(“This text contains”)、一个 strong 节点和一个附加文本节点( “文本”)。 strong 节点包含一个文本节点(“strong”)。因为这些元素位于文档层次结构中的同一级别,所以它们必须彼此分开。

关于JavaScript createDocumentFragment(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44577638/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com