Я работал над небольшим проектом, где я использую метод jQuery .clone()
. Pitfall с этим использует его в HTML, который имеет уникальные идентификаторы. Итак, я продолжил реализацию getComputedStyle
, чтобы найти свойства стиля оригинальных уникальных элементов, чтобы скопировать его в клон и дать ему новый идентификатор (да, он может дать проблемы с производительностью, но он экспериментальный).Использование клон jQuery вне DOM
В соответствии со спецификацией jQuery выполнение этого процесса после клонирования, но до добавления приведет к тому, что манипуляции произойдут вне DOM (поэтому не будет обнаружено нарушение «id»). Но я заметил некоторое странное поведение в браузерах, когда пытаюсь найти свойства стиля элементов после клонирования объекта. До этого, все браузеры возвращают то же значение, но после того, как клонированный:
Firefox - беззаботный и интересно вычисленный стиль клона является фактическим значение CSS, а не вычисленные данные (в пикселях).
IE - кажется, работает, но значение не всегда корректно.
Хром - не вычисляется. Вот пример:
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>');
});
Кто-нибудь знает, если это ошибка или имеет подобное поведение было прежде? Не много ходить по сети (даже не Stackoverflow). Заранее благодарим за понимание.
Редактировать - сделал еще несколько тестов, и похоже, что IE ведет себя так же, как Chrome. Только вместо того, чтобы ничего не возвращать, все настроено на «auto». Если тип клонированных объектов доступен с помощью .css()
, все значения возвращают 0px
(включая такие свойства, как фон). Кажется, только Mozilla обрабатывает клонированный объект, как если бы какой-либо стиль был применен к нему вообще.
Не прямой ответ, но зачем вам так много работать с 'getComputedStyle'? Не было бы проще и более предсказуемо стилизовать элементы, используя классы, вместо того, чтобы искать стили CSS? – Matijs
Я думаю [это может вам помочь] (http://stackoverflow.com/q/18706243/473016) – anpsmn
Спасибо, anpsmn. Не могу поверить, что я этого не нашел. Я действительно решил пойти туда, где предлагает Феликс Клинг (стиль копирования из исходных объектов). Несмотря на то, что Mozilla справляется с этим, было бы замечательно, если бы это был кросс-браузер. Матис, вы правы, но код, который он извлечен, подразумевается как небольшой плагин (лупа), где я не хочу заставлять людей менять свою файловую структуру. Конечно, я рекомендую использовать классы. Приветствия за ответы. – Shikkediel