<script>
function sh(o)
{
  alert(o.parentNode.childNodes.length);
}
</script>
<div>
  <div onclick='sh(this)'>标题</div>
  <div>内容</div>
</div>在IE中,返回的是2,是正确的,但用chrome,返回的却是4,造成程序出错,怎么会这样子呢???

解决方案 »

  1.   

    本想根据所点击的“标题”来设置对应的“内容”隐藏或显示,但是却没能正确的获得“内容”这个对象,究竟该怎么做啊?还需要判断是什么浏览器吗?疑惑啊~~~
    <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>
      

  2.   

    浏览器会把空白以及文字的地方看成一个textNode 而ie不会
      

  3.   

    不同浏览器,解析不一样用 getElementsByTagName 代替它
      

  4.   

    把alert(o.parentNode.childNodes.length);换成
    alert(o.parentNode.children.length);
      

  5.   

    实际上不能说IE的正确,chrome、firefox、opera都会把空白文本,比如回车换行、空字符串、制表符等解释为一个text节点。严格来说我比较讨厌IE,不是那么标准。
      

  6.   


    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";
        }
    }
      

  7.   

    要不你把div写在一行吧。
    要不,你把换行的孩子除去。
      

  8.   

    你换个取法,<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);
    }就可以了