2010-06-11 18 views
6

Ich bin auf meiner Website in IE dieses Problem mit (6,7,8):IE: 'nodeType' ist Null oder kein Objekt

‘nodeType’ is null or not an object

Der Fehler auf "f.nodeType" bezieht sich Eigentum . Grundsätzlich ist f undefiniert, also das Problem ist vor, aber ich kann es nicht beheben.

(von IE Developer Toolbar Debug scheint es, diese Linie zu sein, der den Fehler zu werfen) (autocolumn.min.js line 13 erweitert unten zur besseren Lesbarkeit)

Seite ist bei 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

@scunliffe. Danke für die Bearbeitung. Wie hast du Javascript erweitert? Benutzt du eine bestimmte Software oder hast du es manuell gemacht? Dank – aneuryzm

+1

ich nicht jquery gut genug kennen zu wissen, ob dies: $ clone.attr ("nodeType") $ clone.nodeType- sein sollte, aber nodeType ist kein attr in gewöhnlichen javascript/dom .. – kennebec

+1

kennebec : jQuery 'attr <-Methode befasst sich nicht immer mit Attributen. Manchmal handelt es sich um Eigenschaften und manchmal um Attribute, abhängig von der Eigenschaft/dem Attribut, auf das zugegriffen wird. Genau zu dem zu gelangen, was es tun soll, scheint jenseits desjenigen zu liegen, der es in den jQuery-Dokumenten dokumentiert hat. –

Antwort

4

Mit dem "Firebug lite" Bookmarklet (Sie können es hier bekommen: http://getfirebug.com/firebuglite), könnte ich den Ort eingrenzen, wo der Fehler tatsächlich geworfen wird.

Es scheint, dass die Wurzel des Problems nicht in dem Code liegt, den Sie extrahiert haben, sondern in jQuery selbst.

Ich bemerkte, dass Sie jQuery Version 1.2.6 verwenden. Das Problem ist die Klon-Methode dieser Version. Dies führt zu einem Fehler in dieser Zeile Ihres geschrieben Code:

$clone=$cloneMe.clone(true); 

Ich könnte Ihnen weitere Informationen geben, wo genau der Fehler passiert, aber ich glaube nicht, dass dies Ihr Problem lösen wird. Wie auch immer, es ist keine gute Idee, einen Workaround für den fehlerhaften jQuery-Code zu erstellen. Ich würde eher empfehlen, eine neuere Version von jQuery auszuprobieren (nach einem kurzen Blick habe ich gesehen, dass dort die Klon-Methode anders implementiert ist) und schauen, ob das dein Problem löst.

EDIT: Sorry, es ist nicht diese Linie

$clone=$cloneMe.clone(true); 

aber diese Zeile:

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

(Linie 42 in der autocolumn.js)

+0

ok danke, das Problem ist, dass ich jQuery nicht aktualisieren kann, weil Drupal es nicht unterstützt. Sollte ich erwägen, 2 jquery-Versionen zu verwenden (ich nicht das ist nicht effiziente Lösung, aber es könnte ein vernünftiger sein). – aneuryzm

0

Was passiert, wenn Sie Verwenden Sie stattdessen $clone.get(0).nodeType === 1?

Es wird empfohlen, den strikten Gleichheitsoperator === anstelle von == zu verwenden, wenn der Typ des Werts bekannt ist und keine implizite Konvertierung erforderlich ist. Der strict-Operator sollte auch funktionieren, auch wenn nodeType nicht definiert, null oder "kein Objekt"

.get(0) wahrscheinlich nicht notwendig ist. Ich wollte nur sicherstellen, dass ich direkt am Element arbeite und nicht über die jQuery-Instanz.

+0

hi, es ist die gleiche, gleiche Fehlermeldung. Sowieso funktioniert es dann, was ich entfernen möchte, ist die nervige Fehlermeldung in IE – aneuryzm

Verwandte Themen