2010-06-11 17 views
6

estoy teniendo este problema en mi sitio web en IE (6,7,8):IE: 'nodeType' es nulo o no un objeto

‘nodeType’ is null or not an object

El error se refiere a la propiedad "f.nodeType" . Básicamente, f no está definido, por lo que el problema es anterior, pero no puedo solucionarlo.

(de IE barra de depuración desarrollador que parece ser esta línea que está lanzando el error) (autocolumn.min.js line 13 expandieron a continuación para facilitar la lectura)

página está en 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. Gracias por editar ¿Cómo expandiste Javascript? ¿Estás usando un software específico o lo hiciste manualmente? gracias – aneuryzm

+1

No sé jQuery lo suficientemente bien como para saber si esto: $ clone.attr ("nodeType") debería ser $ clone.nodeType- pero nodeType no es una attr en ordinaria Javascript/DOM .. – kennebec

+1

kennebec : el método 'attr' de jQuery no siempre trata con atributos. A veces se trata de propiedades, y a veces se trata de atributos, dependiendo de la propiedad/atributo que se accede. Llegar al corazón de exactamente lo que se supone que debe hacer parece haber estado más allá de quien lo haya documentado en los documentos de jQuery. –

Respuesta

4

Utilizando el Bookmarklet "Firebug lite" (puede obtenerlo aquí: http://getfirebug.com/firebuglite), podría delimitar el lugar donde realmente se está arrojando el error.

Parece que la raíz del problema no está en el código que ha extraído, sino en jQuery.

Me di cuenta de que está utilizando jQuery versión 1.2.6. El problema es el método de clonación de esa versión. Esto da lugar a un error en esta línea de código publicado:

$clone=$cloneMe.clone(true); 

Te podría dar más detalles, exactamente donde ocurre el error, pero no creo que esto va a resolver su problema. De todos modos, no es una buena idea construir una solución alternativa para el código JQuery defectuoso. Prefiero recomendar probar una versión más reciente de jQuery (después de un vistazo rápido vi que el método de clonación se implementa de forma diferente) y echar un vistazo si eso resuelve tu problema.

EDIT: Lo sentimos, no es esta línea

$clone=$cloneMe.clone(true); 

pero esta línea:

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

(línea 42 en las autocolumn.js)

+0

ok, gracias, el problema es que no puedo actualizar jQuery porque Drupal no lo admite. ¿Debería considerar usar 2 versiones de jquery (no es una solución eficiente, pero podría ser razonable). – aneuryzm

0

¿Qué pasa, si usar $clone.get(0).nodeType === 1 en su lugar?

Se recomienda utilizar el operador igual estricto === en lugar de ==, si se conoce el tipo del valor y no se necesita una conversión implícita. El operador igual estricto también debería funcionar incluso si nodeType fuera indefinido, nulo o "no es un objeto"

.get(0) probablemente no sea necesario. Solo quería asegurarme de trabajar en el elemento directamente y no en jQuery-Instance.

+0

hola, es lo mismo, el mismo mensaje de error. De todos modos funciona, entonces, lo que quiero eliminar es el molesto mensaje de error en IE – aneuryzm

Cuestiones relacionadas