childNodes的值竟然不一样???

sxldfang 2012-07-19 11:50:04


<script>
function sh(o)
{
alert(o.parentNode.childNodes.length);
}
</script>


<div>
<div onclick='sh(this)'>标题</div>
<div>内容</div>
</div>


在IE中,返回的是2,是正确的,但用chrome,返回的却是4,造成程序出错,怎么会这样子呢???
...全文
175 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
sxldfang 2012-07-20
  • 打赏
  • 举报
回复
本想根据所点击的“标题”来设置对应的“内容”隐藏或显示,但是却没能正确的获得“内容”这个对象,究竟该怎么做啊?还需要判断是什么浏览器吗?疑惑啊~~~


<script>

function sh(o){
var obj=o.parentNode.childNodes[1]; // 在IE下能正确获取“内容”,但在chrome下却是错误的~~~
if(obj.className=="c"){
o.className="bg1";

obj.className="hidden";
}

else{


o.className="bg2";

obj.className="c";
}

}

</script>
jya126 2012-07-20
  • 打赏
  • 举报
回复
你换个取法,<div>
<div id="xx" onclick='sh(this)'>标题</div>
<div>内容</div>
</div>,加个id,然后
function sh(o)
{
// alert(o.parentNode.childNodes.length);
alert(document.getElementById("xx").innerHTML.length);
}就可以了
licip 2012-07-20
  • 打赏
  • 举报
回复
要不你把div写在一行吧。
要不,你把换行的孩子除去。
likeajin 2012-07-20
  • 打赏
  • 举报
回复

function sh(o){
var obj=o.parentNode.firstChild;
while(obj && obj.nodeType!=1)obj=obj.nextSibling;
if(obj.className=="c"){
o.className="bg1";
obj.className="hidden";
}
else{
o.className="bg2";
obj.className="c";
}
}
likeajin 2012-07-20
  • 打赏
  • 举报
回复
实际上不能说IE的正确,chrome、firefox、opera都会把空白文本,比如回车换行、空字符串、制表符等解释为一个text节点。严格来说我比较讨厌IE,不是那么标准。
  • 打赏
  • 举报
回复
把alert(o.parentNode.childNodes.length);换成
alert(o.parentNode.children.length);
hch126163 2012-07-20
  • 打赏
  • 举报
回复
不同浏览器,解析不一样

用 getElementsByTagName 代替它
似梦飞花 2012-07-20
  • 打赏
  • 举报
回复
浏览器会把空白以及文字的地方看成一个textNode 而ie不会
sxldfang 2012-07-20
  • 打赏
  • 举报
回复
O(∩_∩)O谢谢楼上各位的帮助~~~

87,902

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧