Ich habe an einem kleinen Projekt gearbeitet, in dem ich die Methode jQuery .clone()
verwende. Pitfall mit diesem verwendet es auf HTML, das eindeutige Bezeichner hat. Also fuhr ich fort, getComputedStyle
zu implementieren, um die Stileigenschaften der ursprünglichen einzigartigen Elemente zu finden, um sie in den Klon zu kopieren und danach eine neue ID zu geben (ja, es kann Leistungsprobleme geben, aber es ist experimentell).Verwenden eines jQuery-Klons außerhalb des DOM
Gemäß der jQuery-Spezifikation wird dies nach dem Klonen, aber vor dem Anhängen, dazu führen, dass die Manipulation außerhalb des DOM stattfindet (damit keine ID-Verletzung auftritt). Aber ich habe merkwürdiges Verhalten in verschiedenen Browsern festgestellt, als ich nach dem Klonen des Objekts nach Stileigenschaften der Elemente suchte. Vor ihr lag, bringe alle Browser die gleichen Werte, aber nach geklont:
Firefox - sorglos, und interessanterweise die berechneten Stil Klon ist der tatsächliche Wert CSS anstatt berechneten Daten (in Pixeln).
IE - scheint zu arbeiten, aber der Wert ist nicht unbedingt korrekt.
Chrome - berechnet nicht. Hier ein Beispiel:
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>');
});
Weiß jemand, ob dies ein Fehler ist oder ähnliches Verhalten zuvor gesehen wurde? Nicht viel online zu gehen (nicht einmal Stackoverflow). Vielen Dank im Voraus für jede Einsicht.
Edit - hat noch mehr Tests gemacht und es sieht so aus, als ob IE sich genauso verhält wie Chrome. Nur, anstatt nichts zurückzugeben, wird alles auf 'auto' gesetzt. Wenn auf den Stil der geklonten Objekte mithilfe von .css()
zugegriffen wird, geben alle Werte 0px
zurück (einschließlich Eigenschaften wie Hintergrund). Es scheint nur Mozilla behandelt das geklonte Objekt, als ob irgendein Stil überhaupt auf es angewendet wurde.
Keine direkte Antwort, aber warum sollten Sie so viel mit 'getComputedStyle' arbeiten? Wäre es nicht leichter und viel besser vorhersehbar, Ihre Elemente mit Klassen zu stylen, anstatt CSS-Stile auf Ihre Art zu finden? – Matijs
Ich denke [das kann Ihnen helfen] (http://Stackoverflow.com/q/18706243/473016) – anpsmn
Danke, anpsmn. Ich kann nicht glauben, dass ich das nicht gefunden habe. Ich hatte mich tatsächlich entschieden, den Weg zu gehen, den Felix Kling dort vorschlägt (kopiere Stil aus den Originalobjekten). Obwohl die Art, wie Mozilla es behandelt, wäre es wunderbar, wenn es Cross-Browser zur Verfügung stünde. Matijs, du hast natürlich Recht, aber der Code, aus dem er extrahiert wird, ist als kleines Plugin gedacht (Lupe), in dem ich die Leute nicht zwingen will, ihre Dateistruktur zu ändern. Ich werde natürlich Kurse empfehlen. Prost für die Antworten. – Shikkediel