Почему $(document).append() не работает в jQuery 1.9.1?
Почему следующий фрагмент кода не работает с jQuery 1.9.1? С предыдущими версиями работает нормально.
$(function () {
$(document).append(test);
document.write('done');
});
var test = {
version: "1.0",
};
JSFiddle: http://jsfiddle.net/Chessjan/NsjqM
В консоли JS это выдает ошибку как это:
TypeError: document is null
safeFrag = document.createDocumentFragment(); jquery-1.9.1.js (line 5823)
Редактировать:
Спасибо всем за быстрые и обширные ответы. Наблюдаемая проблема была обнаружена случайно, и, конечно же, $(document.body).append()
это правильный подход.
4 ответа
jQuery 1.9.x звонки
this[ 0 ].ownerDocument
в его buildFragment()
метод. Так как вы проходите в document
, вызов
document.ownerDocument
будет ссылаться на null
и вызвать ошибку. Любой другой узел будет ссылаться на document
что, конечно, работает.
Вывод: не звоните $(document).append()
но использовать $(document.body)
например.
Ваш код никогда не работал. Он должен document.body
не document
,
Вот несколько примеров в разных версиях не работает:
JQuery 1.6.4: http://jsfiddle.net/us9Kz/
JQuery 1.7.2: http://jsfiddle.net/us9Kz/1/
JQuery 1.8.3: http://jsfiddle.net/us9Kz/3/
JQuery 1.9.1: http://jsfiddle.net/us9Kz/4/
jQuery 2.0.0b1: http://jsfiddle.net/us9Kz/5/
Код работает с document.body
(в jQuery 1.9.1): http://jsfiddle.net/us9Kz/6/
Чтобы ответить на ваш вопрос, я попробовал в JSfiddle все доступные версии jQuery. Это случилось, чтобы дать ту же ошибку.
Почему это не работает: при преобразовании в строку документ становится чем-то вроде [object HTMLDocument], и, конечно, такого идентификатора нет, он возвращает ноль.
Следующие работы:
var test = "1.0"
$('body').append(test);
или делать это через нотацию объекта, как вы это сделали:
var test = {
version: '1.0'
}
$('body').append(test.version)
Внутри кода jQuery есть эта строка:
jQuery.buildFragment( args, this[ 0 ].ownerDocument, false, this );
this
является выбранным вами объектом jQuery. В твоем случае документ. Значение ownerDocument документа равно нулю, и это то, что передается как document
на призыв к document.createDocumentFragment();
, Следовательно вы получаете ошибку, которая document
имеет значение null (слегка неправильное именование переменных, так как это заставляет вас думать, что сам объект документа как-то равен нулю)
Как говорили другие люди. Добавьте к телу вместо этого, и он будет работать нормально.