为了账号安全,请及时绑定邮箱和手机立即绑定

获取的第一个子节点不是<p>?,为什么是text

获取的第一个子节点不是<p>?,为什么是text

精慕门8588110 2016-06-08 17:15:30
<body><div id="con">  <p>javascript</p>  <div>jQuery</div>  <h5>PHP</h5></div><script type="text/javascript">var x=document.getElementById("con");  document.write(x.firstChild.nodeName); document.write(x.lastChild.nodeName);</script></script></body></html>
查看完整描述

5 回答

?
柠檬酸钠

TA贡献331条经验 获得超534个赞

由于div#con和p之间有空格,在Chrome浏览器中空格是一个#text文本节点(大概是这样吧),如果这段代码在IE中执行就不会出现这种情况了。为了浏览器兼容可以使用这个函数

function getChildren (ele) {
	var children = ele.childNodes;
	var arr = [];
	for (var i = 0; i < children.length; i++) {
		if (children[i].nodeType == 1) {
			arr.push(children[i]);
		}
	}
	return arr;
}

获取#con下面的第一个p元素

var p = getChildren(document.getElementById('con'))[0];
alert(p);      //[object HTMLParagraphElement]


查看完整回答
1 反对 回复 2016-06-08
?
woshi123w

TA贡献15条经验 获得超10个赞

<div id="con"><div>jQuery</div><p>javascript</p><h5>PHP</h5></div>

去掉节点之间的空白

查看完整回答
反对 回复 2016-06-08
?
Cassie_yu

TA贡献22条经验 获得超15个赞

除IE外,其余浏览器中 节点之间的空白符是文本节点。

所以,以上代码中 id=con 的子节点总共有七个,分别为 空白节点、P、空白节点、DIV、空白节点、H5、空白节点。

PS:仔细看 9-8 访问子节点childNodes中的内容。

查看完整回答
反对 回复 2016-06-08
?
Caballarii

TA贡献1123条经验 获得超629个赞

因为除了IE,其它浏览器会把你的换行符(尽管你只是代码换行了),算成一个文本节点。

查看完整回答
反对 回复 2016-06-08
  • 5 回答
  • 0 关注
  • 2028 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信