Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

IE: ‘nodeType’ is null or not an object

I'm having this issue on my website in IE (6,7,8):

‘nodeType’ is null or not an object

The error refers to "f.nodeType" property. Basically f is undefined, so the issue is before, but I cannot fix it.

(from IE developer toolbar debug it appears to be this line that is throwing the error) (autocolumn.min.js line 13 expanded below for readability)

Page is at 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();
        }
      }
    }
  }
}
like image 758
aneuryzm Avatar asked Jun 11 '10 12:06

aneuryzm


1 Answers

Using the "Firebug lite" Bookmarklet (you can get it here: http://getfirebug.com/firebuglite ), I could narrow down the place where the error actually is being thrown.

It seems that the root of the problem is not in the code that you've extracted, but in jQuery itself.

I noticed that you're using jQuery version 1.2.6. The problem is the clone-method of that version. This results in an error in this line of your posted code:

$clone=$cloneMe.clone(true);

I could give you more details, where exactly the error happens, but I don't think that this will solve your problem. Anyway it's not a good idea to build a workaround for the flawed jQuery-code. I'd rather recommend to try a more recent version of jQuery (after a quick glance I saw that there the clone-method is implemented differently) and have a look if that solves your problem.

EDIT: Sorry, it's not this line

$clone=$cloneMe.clone(true);

but this line:

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

(line 42 in the autocolumn.js)

like image 184
Codekie Avatar answered Nov 13 '22 13:11

Codekie