我只是DOM操作的初学者,对于一个愚蠢的问题感到抱歉。 我有以下HTML和JS代码
<ul id="myList">
<li>Coffee</li>
<li>Tea</li>
</ul>
<p>Click the button to get the HTML content of the list's first child node.</p>
<button onclick="myFunction()">Try it</button>
<p><strong>Note:</strong> Whitespace inside elements is considered as text, and text is considered as nodes.</p>
<p>If you add whitespace before the first LI element, the result will be "undefined".</p>
<p id="demo"></p>
<p id="demo2"></p>
<script>
function myFunction() {
var list = document.getElementById("myList").firstChild.innerHTML;
document.getElementById("demo").innerHTML = list;
var x=document.getElementById("myList").childNodes[0];
document.getElementById("demo2").innerHTML=x.nodeName;
}
</script>
这里的问题是
document.getElementById("demo").innerHTML = list;
在窗口中输出undefined。但是,当我使用firstElementNode属性时,一切正常。或者是因为第一个子节点是与ID属性对应的Attr? 提前致谢。
答案 0 :(得分:2)
解决方案非常简单。我错过了白色空间也被考虑在内。这就是为什么第一个
document.getElementById("demo").innerhtml
给了我undefined。如果我删除空格并将元素设为
<ul id="myList"><li>Coffee</li><li>Tea</li></ul>
一切正常。
答案 1 :(得分:1)
你的问题通过练习本身解决了:
注意:元素内的空格被视为文本,文本被视为节点。如果在第一个LI元素之前添加空格,结果将为&#34; undefined&#34;。
由于您在ul
元素之后有换行符,firstChild
会将该换行符返回到您的variable
列表,这就是未定义的内容。
答案 2 :(得分:1)
答案 3 :(得分:0)
firstChild
是第一个子节点。它可以是任何节点类型,包括文本节点和注释。
firstElementChild
是第一个作为元素的子节点。
在您的情况下,第一个子节点是文本节点,特别是第一个<li>
标记之前的空格。
文本节点没有innerHTML
属性,这就是您获得undefined
的原因。