Pracowałem nad małym projektem, w którym używam metody jQuery .clone()
. Pułapka z tym jest przy użyciu go w HTML, który ma unikalne identyfikatory. Więc zacząłem wdrażać getComputedStyle
, aby znaleźć właściwości stylu oryginalnych unikatowych elementów, aby skopiować je do klona i nadać mu nowy identyfikator (tak, może to dać problemy z wydajnością, ale jest to eksperymentalne).Używanie klonu jQuery poza DOM
Zgodnie ze specyfikacją jQuery, wykonanie tej czynności po klonowaniu, ale przed dołączeniem spowoduje manipulację poza DOM (więc nie wystąpi żadne naruszenie identyfikatora). Ale zauważyłem dziwne zachowanie w różnych przeglądarkach, gdy próbuję znaleźć właściwości stylu elementów po sklonowaniu obiektu. Przed nim wszystkie przeglądarki zwraca te same wartości, ale po sklonowany:
Firefox - beztroski i ciekawe style komputerowej klonu jest rzeczywista wartość CSS zamiast obliczone dane (w pikselach).
IE - wydaje się działać, ale wartość niekoniecznie jest poprawna.
Chrome - nie oblicza. Oto przykład:
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>');
});
ktoś wie czy to jest błąd lub ma podobne zachowanie nie widziano? Nie wiele do zrobienia w Internecie (nawet Stackoverflow). Z góry dziękujemy za wszelki wgląd.
Edytuj - wykonano więcej testów i wygląda na to, że IE zachowuje się tak samo jak Chrome. Tylko zamiast niczego nie zwracać, wszystko jest ustawione na "auto". Jeśli styl sklonowanych obiektów jest dostępny za pomocą .css()
, wszystkie wartości zwracają 0px
(w tym właściwości takie jak tło). Wygląda na to, że Mozilla traktuje sklonowany obiekt tak, jakby w ogóle był w nim zastosowany jakiś styl.
Nie jest to bezpośrednia odpowiedź, ale dlaczego tak bardzo chciałbyś pracować z 'getComputedStyle'? Czy nie byłoby łatwiej i bardziej przewidywalnie stylować elementy przy użyciu klas, zamiast szukać stylów CSS na swój sposób? – Matijs
Chyba [to może ci pomóc] (http://stackoverflow.com/q/18706243/473016) – anpsmn
Dzięki, anpsmn. Nie mogę uwierzyć, że tego nie znalazłem. Tak naprawdę zdecydowałem się pójść tak, jak sugeruje to Felix Kling (skopiuj styl z oryginalnych przedmiotów). Chociaż sposób obsługi Mozilli byłby całkiem wspaniały, gdyby była dostępna przeglądarka. Matijs, masz rację oczywiście, ale kod, z którego jest pobierany, ma na celu małą wtyczkę (lupa), w której nie chcę zmuszać ludzi do zmiany struktury plików. Polecam używanie zajęć oczywiście. Pozdrawiam za odpowiedzi. – Shikkediel