var a = document.getElementsByTagName("div")[0].childNodes; for(var i = 0; i < a.length ; i++){ document.write("第" + i + "个子节点名是:"+ a[i].nodeName + "<br>"); document.write("第" + i + "个子节点值是:"+ a[i].nodeValue + "<br>"); document.write("第" + i + "个子节点类型是:"+ a[i].nodeType + "<br>"); }
因为你获取的是节点,所以element.nodeValue是获取的节点本身的值,而并非开始和结束的元素节点中间的文本,文本和元素都是节点,但是两者是不一样的,要想进一步获取元素节点之间的文本需要进一步获取其文本子节点,通过element.childeNodes[j].nodeValue.
举个例子:
<ul> <li>第一个li</li> </ul> var element = document.getElementsByTagName("ul")[0].childNodes(); //获取的是ul的子节点的集合, //element[0].nodeValue获得是li元素节点的值,元素节点的nodeValue为undefined或null。 //要想获得li元素节点所包含的文本节点值,而该文本节点是li的子节点,就需要进一步获取li的子节点,再通过nodeValue //得到的就是文本节点的值
引用9-7对nodeValue的说明
二、nodeValue 属性:节点的值
1. 元素节点的 nodeValue 是 undefined 或 null
2. 文本节点的 nodeValue 是文本自身
3. 属性节点的 nodeValue 是属性的值
文本部分就是文本节点,标签就是元素节点,标签里面的文字是文本节点,所以,你如果想要输出标签里的文字,该是a[i].childNodes[0].nodeValue
元素节点的值,是 undefined 或 null
文本节点的值是文本本身
第0个子节点名是:#text
第0个子节点值是:javascript
第0个子节点类型是:3
第1个子节点名是:P
第1个子节点值是:null
第1个子节点类型是:1
第2个子节点名是:DIV
第2个子节点值是:null
第2个子节点类型是:1
第3个子节点名是:H5
第3个子节点值是:null
第3个子节点类型是:1
这是是显示的值,为什么节点值是null? 不应该依次输出javascript javascript jQuery PHP么?