Domanda Perché $ (document) .append () non funziona in jQuery 1.9.1?


Perché la seguente parte di codice non funziona da quando jQuery 1.9.1? Con le versioni precedenti funziona bene.

$(function () { 
    $(document).append(test);
    document.write('done');
});
var test = {
    version: "1.0",
};

JSFiddle: http://jsfiddle.net/Chessjan/NsjqM/

Nella console JS emette un errore come questo:

TypeError: document is null
safeFrag = document.createDocumentFragment(); jquery-1.9.1.js (line 5823)

Modificare:

Grazie a tutti per aswers rapidi e completi. Il problema osservato è stato trovato per caso e, naturalmente, $(document.body).append() è un approccio corretto.


13
2018-03-05 10:29


origine


risposte:


Chiamate jQuery 1.9.x.

this[ 0 ].ownerDocument

al suo interno buildFragment() metodo. Dal momento che tu passi nel document, la chiamata

document.ownerDocument

farà riferimento a null e causare l'errore. Qualsiasi altro nodo farà riferimento a document, che ovviamente funziona.


Conclusione: non chiamare $(document).append() ma usa $(document.body) per esempio.


15
2018-03-05 10:41



Il tuo codice sarà di mai lavorato. Deve document.body  non  document.

Ecco alcuni esempi in diverse versioni di esso non funzionanti:

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/

Codice funzionante con document.body (su jQuery 1.9.1): http://jsfiddle.net/us9Kz/6/


3
2018-03-05 10:42



All'interno del codice jQuery ha questa linea:

jQuery.buildFragment( args, this[ 0 ].ownerDocument, false, this );

this è l'oggetto jQuery selezionato. Nel tuo caso, il documento. Il valore ownerDocument del documento è null e questo è ciò che viene passato come document alla chiamata a document.createDocumentFragment();. Quindi ottieni l'errore document è null (Nominativo di variabili leggermente brutto in quanto ti fa pensare che l'oggetto stesso del documento sia in qualche modo nullo)

Come hanno detto altre persone. Aggiungi invece al corpo e funzionerà correttamente.


1
2018-03-05 10:43



Per rispondere alla tua domanda ho provato in JSfiddle tutte le versioni disponibili di jQuery. È successo dare lo stesso errore.

Perché non funziona: il documento diventa qualcosa come [object HTMLDocument] quando viene eseguito il cast alla stringa, e ovviamente non esiste un ID, restituirà null.

I seguenti lavori:

var test = "1.0"
$('body').append(test);

o farlo attraverso la notazione dell'oggetto come hai fatto tu:

var test = {
    version: '1.0'
}
$('body').append(test.version)

1
2018-03-05 10:35