Ho lavorato a un piccolo progetto in cui sto utilizzando il metodo jQuery .clone()
. Il trabocchetto con questo lo sta usando su HTML che ha identificatori univoci. Quindi ho continuato a implementare getComputedStyle
per trovare le proprietà di stile degli elementi unici originali, al fine di copiarlo sul clone e dare un nuovo id dopo (sì, può dare problemi di prestazioni ma è sperimentale).Utilizzo di un clone jQuery all'esterno del DOM
In base alle specifiche di jQuery, fare questo dopo la clonazione, ma prima di accodare si verificherà la manipolazione al di fuori del DOM (quindi non si verificherà alcuna "violazione" dell'ID). Ma ho notato un comportamento strano attraverso i browser quando provo a trovare le proprietà di stile degli elementi dopo che l'oggetto è stato clonato. Prima di esso, tutti i browser restituiscono gli stessi valori, ma dopo essere stati clonati:
Firefox - spensierato, ed è interessante notare lo stile computerizzata del clone è il valore CSS reale, piuttosto che i dati calcolati (in pixel).
IE - sembra funzionare ma il valore non è necessariamente corretto.
Chrome - non calcola. Ecco un esempio:
http://codepen.io/anon/pen/zxqmNK?editors=011
var elements = [];
var objects = [];
$('body').find('[id]').each(function() {
elements.push(this);
});
$('body').clone().find('[id]').each(function() {
objects.push(this);
});
$.each(elements, function(key, element) {
var current = window.getComputedStyle(element, null).getPropertyValue('width');
$('#log').append('<p>' + element.id + ': ' + current + '</p>');
});
$('#log').append('</br>');
$.each(objects, function(count, object) {
var current = window.getComputedStyle(object, null).getPropertyValue('width');
$('#log').append('<p>' + object.id + ': ' + current + '</p>');
});
Qualcuno sa se questo è un bug o è un comportamento simile stato visto prima? Non c'è molto da fare sul web (nemmeno Stackoverflow). Grazie in anticipo per eventuali approfondimenti.
Modifica: ha eseguito alcuni test e sembra che IE si comporta allo stesso modo di Chrome. Solo invece di non restituire nulla, tutto è impostato su 'auto'. Se si accede allo stile degli oggetti clonati utilizzando .css()
, tutti i valori restituiscono 0px
(incluse le proprietà come sfondo). Sembra che Mozilla tratti l'oggetto clonato come se fosse stato applicato a tutti gli stili.
Non è una risposta diretta, ma perché vorresti lavorare con 'getComputedStyle' tanto? Non sarebbe più facile e più prevedibile modellare i tuoi elementi usando le classi invece di dover trovare gli stili CSS a modo tuo? – Matijs
Immagino [questo potrebbe aiutarti] (http://stackoverflow.com/q/18706243/473016) – anpsmn
Grazie, anpsmn. Non posso credere di non averlo trovato. Avevo infatti deciso di andare come suggerisce Felix Kling (copia lo stile degli oggetti originali). Anche se il modo in cui Mozilla lo gestisce sarebbe meraviglioso se fosse disponibile un browser incrociato. Matijs, hai ragione, ma il codice da cui è stato tratto è inteso come un piccolo plugin (lente d'ingrandimento), in cui non voglio costringere le persone a dover cambiare la loro struttura dei file. Consiglierò l'uso di lezioni ovviamente. Saluti per le risposte. – Shikkediel