IE:'nodeType'为null或不是对象

时间:2010-06-11 12:30:40

标签: jquery internet-explorer

我在IE(6,7,8)的网站上遇到了这个问题:

  

'nodeType'为null或不是对象

错误是指“f.nodeType”属性。基本上f是未定义的,所以问题出在之前,但我无法修复它。

(从IE开发人员工具栏调试它似乎是这行抛出错误) (autocolumn.min.js line 13扩展如下以便于阅读)

页面位于http://www.donatellabernardi.ch/drupal

function split($putInHere,$pullOutHere,$parentColumn,height){
  if($pullOutHere.children().length){
    $cloneMe=$pullOutHere.children(":first");
    $clone=$cloneMe.clone(true);
    if($clone.attr("nodeType")==1&&!$clone.hasClass("dontend")){
    ^^^^^^^^^^^^^^^^^^^^^^^^^^ Chokes on

      $putInHere.append($clone);
      if($clone.is("img")&&$parentColumn.height()<height+20){
        $cloneMe.remove();
      }else if(!$cloneMe.hasClass("dontsplit")&&$parentColumn.height()<height+20){
        $cloneMe.remove();
      }else if($clone.is("img")||$cloneMe.hasClass("dontsplit")){
        $clone.remove();
      }else{
        $clone.empty();
        if(!columnize($clone,$cloneMe,$parentColumn,height)){
          if($cloneMe.children().length){
            split($clone,$cloneMe,$parentColumn,height);
          }
        }
        if($clone.get(0).childNodes.length==0){
          $clone.remove();
        }
      }
    }
  }
}

2 个答案:

答案 0 :(得分:4)

使用“Firebug lite”Bookmarklet(您可以在此处获取:http://getfirebug.com/firebuglite),我可以缩小实际发生错误的地方。

似乎问题的根源不是你提取的代码,而是jQuery本身。

我注意到你使用的是jQuery 1.2.6版。问题是该版本的克隆方法。这导致您发布的代码的这一行出错:

$clone=$cloneMe.clone(true);

我可以给你更详细的信息,错误发生的地方,但我不认为这会解决你的问题。无论如何,为有缺陷的jQuery代码构建一个变通方法并不是一个好主意。我宁愿建议尝试更新版本的jQuery(快速浏览后我看到克隆方法的实现方式不同),看看是否可以解决你的问题。

修改 对不起,这不是这一行

$clone=$cloneMe.clone(true);

但是这一行:

$cache.append($(this).children().clone(true));

(autocolumn.js中的第42行)

答案 1 :(得分:0)

如果您使用$clone.get(0).nodeType === 1,会发生什么?

如果值的类型已知且不需要隐式转换,建议使用strict equals运算符===而不是==。即使nodeType未定义,null或“不是对象”,strict equals运算符也应该工作

.get(0)可能没有必要。我只是想确保直接处理Element而不是jQuery-Instance。