Avvia la tua console firebug e prova questo.È giusto? Un bug jQuery che cancella l'archivio dati?
confrontare questo:
$('body').data('x',1);
$(thisx).remove();
console.log($('body').data('x'));
a questo:
$('body').data('x',1);
$(this.x).remove();
console.log($('body').data('x'));
notare la differenza? Se thisx
non è definito, verrà immediatamente generato un errore di riferimento. Se x
è una proprietà non definita di this
, jQuery restituirà il documento come invece il suo set di risultati. JQuery successivo tenterà di rimuovere il documento (che non può), ma prima di farlo rimuoverà tutti i dati associati a qualsiasi elemento figlio del documento. Quindi, cancellando il tuo archivio dati.
Nota: this
può essere qualsiasi riferimento di elemento o oggetto. Devi solo provare jQuery per accedere a una proprietà non definita.
(Parla di un dolore, fallisce silenziosamente, e sto cercando di capire perché i miei dati sono improvvisamente assenti, lo rintraccio in un caso speciale in cui un riferimento di elemento non era definito in una situazione specifica).
Così via alle mie domande:
1) Prima di segnalare un bug, sono io analizzando correttamente questo? Inoltre, se qualcuno capisce che questo è un problema noto, fammi sapere. Non sono riuscito a trovarlo nel bug tracker, ma l'interfaccia non è eccezionale (o forse ho sbagliato).
2) Perché alla fine c'è qualche differenza? Sto indovinando thisx
viene valutato immediatamente che causa l'eccezione mentre this.x
è un riferimento che viene passato e valutato nella funzione chiamata, giusto? (dove penso sia la causa selector = selector || document
;
3) Suggerimenti su come gestirlo? Immagino che dovrei controllare che ogni ogni/ogni elemento di riferimento o proprietà di un oggetto (ad esempio stringhe di selettore memorizzate) sia definito prima di passarlo a jQuery quando si rimuove qualcosa.
Penso che diventi problematico quando undefined diventa l'elemento del documento. Ci sono altri casi in cui questo è utile in jQuery? –
Hmm .... Mi chiedo se potrebbe essere meglio gestito dove $ ('') è usato per quel caso. Non che lo cambiassero ora per ragioni ereditarie. Ancora il codice potrebbe distinguere tra una stringa vuota e un valore non definito. Potrebbe anche controllare la lunghezza degli argomenti. Un valore non definito avrebbe ancora un argomento. Lunghezza == 1 mentre $() sarebbe 0, giusto? –
ah, buon punto. non ha pensato alla variabile argomenti. – cobbal