nodeValue返回null(深入理解)

时间:2017-05-05 16:17:48

标签: javascript nodevalue

想法是控制日志节点值。但它不是名称,而是返回null。我不明白为什么,因为代码对我来说似乎很好。所以,我想了解发生了什么。我找到了如何使它工作,但我不明白为什么我的代码不起作用。代码和结果:

HTML

 <div>Users:</div>
  <ul id="myList">
    <li>John</li>
    <li>Doe</li>
  </ul> 

的JavaScript

let listNode = document.body.children[1].children[1]

console.log(listNode)

// Why not return node value?
let value = listNode.nodeValue
console.log(value)

结果: link

2 个答案:

答案 0 :(得分:2)

在JavaScript中表示HTML元素(DOM对象)时,一切都是节点 - 甚至是元素中的文本。 But, not all nodes are elements. 因此,当您获得对<li>的引用时,<li>不是包含该名称的节点,那么它就是子文本节点那个<li>。另一种说法是,元素节点不具有自己的价值,他们的孩子会这样做,这就是为什么当你试图获得null时你得到的nodeValue <li>

要获取该内容,您必须一直向下导航到该节点:

&#13;
&#13;
// Get a node list of all the <li> child elements in the #myList list:
let listNodes = document.querySelectorAll("#myList > li");

// Go to the first <li> in the node list and then navigate the the text node contained within that node
let value = listNodes[0].firstChild.nodeValue;
console.log("The <li>.firstChild node value is: " + value);
console.log("The <li> node type is: " + listNodes[0].nodeType + " (1 = element node)");
console.log("The <li>.firstChild node type is: " + listNodes[0].firstChild.nodeType + " (3 = text node)");
&#13;
<div>Users:</div>
 <ul id="myList">
    <li>John</li>
    <li>Doe</li>
 </ul>
&#13;
&#13;
&#13;

但是,DOM还通过其他方式通过 .textContent .innerHTML 直接显示元素中的内容:

&#13;
&#13;
// Get a node list of all the <li> child elements in the #myList list:
let listNodes = document.querySelectorAll("#myList > li");

// .textContent allows you to extract the text of an element without navigating 
// into its text node
let value = listNodes[1].textContent;
console.log(value);

// While .innerHTML allows you to acces the HTML within an element:
value = listNodes[1].innerHTML;
console.log(value);
&#13;
<div>Users:</div>
 <ul id="myList">
    <li>John</li>
    <li><a href="">Doe</a></li>
 </ul>
&#13;
&#13;
&#13;

答案 1 :(得分:0)

由于Done中的li是节点,因此文本节点不仅HTML代码

更新后的代码:

&#13;
&#13;
let listNode = document.body.children[1].children[1]

console.log(listNode)

// Why not return node value?
let value = listNode.childNodes[0].nodeValue;
console.log(value)
&#13;
<div>Users:</div>
  <ul id="myList">
    <li>John</li>
    <li>Doe</li>
  </ul>
&#13;
&#13;
&#13;