.clone()
方法。这种方法的陷阱是在具有唯一标识符的HTML上使用它。因此,我开始实现getComputedStyle
来查找原始唯一元素的样式属性,以便将其复制到克隆体中,并在此之后给其一个新的id(是的,这可能会导致性能问题,但这只是试验性的)。根据jQuery规范,在克隆后但附加前执行此操作将使操作发生在DOM之外(因此不会发生id“违规”)。但是,当我尝试在对象被克隆后查找元素的样式属性时,我注意到不同浏览器之间存在一些奇怪的行为。在克隆之前,所有浏览器都返回相同的值,但在克隆之后:
Firefox - 无忧无虑,有趣的是克隆体的计算样式是实际的CSS值,而不是计算数据(以像素为单位)。
IE - 似乎可以工作,但值不一定正确。
Chrome - 不计算。以下是一个示例:
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>');
});
有人知道这是一个bug还是类似的行为之前就已经出现过吗? 网上没有太多信息(甚至没有Stackoverflow)。 感谢您提前的任何见解。
编辑 - 进行了更多测试,看起来IE的行为与Chrome相同。
只是不返回任何东西,一切都设置为“自动”。
如果使用.css()
访问克隆对象的样式,则所有值都返回0px
(包括背景等属性)。
似乎只有Mozilla将克隆对象视为已应用任何样式。
getComputedStyle
呢?使用类来设置元素样式难道不更容易和可预测吗? - Matijs