我在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();
}
}
}
}
}
答案 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。