IE: 'nodeType' является нулем или не объектом - PullRequest
6 голосов
/ 11 июня 2010

У меня есть эта проблема на моем сайте в IE (6,7,8):

'nodeType' является нулем или не является объектом

Ошибка относится к свойству 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 ]

4 голосов
/ 15 июня 2010

Используя букмарклет "Firebug lite" (вы можете получить его здесь: http://getfirebug.com/firebuglite), я мог бы сузить место, где на самом деле выдается ошибка.

Кажется, что корень проблемы не в коде, который вы извлекли, а в самом jQuery.

Я заметил, что вы используете jQuery версии 1.2.6. Проблема заключается в методе клонирования этой версии. Это приводит к ошибке в этой строке вашего опубликованного кода:

$clone=$cloneMe.clone(true);

Я мог бы дать вам более подробную информацию, где именно происходит ошибка, но я не думаю, что это решит вашу проблему. В любом случае, не стоит создавать обходной путь для некорректного jQuery-кода. Я бы порекомендовал попробовать более свежую версию jQuery (после быстрого взгляда я увидел, что там клон-метод реализован по-другому), и посмотрите, решит ли это вашу проблему.

EDIT: Извините, это не эта строка

$clone=$cloneMe.clone(true);

но эта строка:

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

(строка 42 в autocolumn.js)

0 голосов
/ 14 июня 2010

Что произойдет, если вместо этого использовать $clone.get(0).nodeType === 1?

Рекомендуется использовать оператор строгого равенства === вместо ==, если тип значения известен и не требуется неявное преобразование. Оператор строгого равенства также должен работать, даже если nodeType будет неопределенным, нулевым или «не объектом»

.get(0), вероятно, не является необходимым. Я просто хотел убедиться, что работал над элементом напрямую, а не над jQuery-экземпляром.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...