我一直在做一个使用 jQuery.clone()
方法的小项目。这样做的陷阱是在具有唯一标识符的 HTML 上使用它。因此,我继续实施getComputedStyle
以查找原始唯一元素的样式属性,以便将其复制到克隆并在之后给它一个新的 id(是的,它会产生性能问题,但它是实验性的)。
根据 jQuery 规范,在克隆之后但在附加之前执行此操作将使操作发生在 DOM 之外(因此不会发生 id 'violation')。但是,当我在克隆对象后尝试查找元素的样式属性时,我注意到跨浏览器的一些奇怪行为。在此之前,所有浏览器都返回相同的值,但在被克隆之后:
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>');
});
有人知道这是一个错误还是以前见过类似的行为?在网络方面没有太多可做的事情(甚至 Stackoverflow 也不行)。提前感谢您的任何见解。
编辑 - 进行了更多测试,看起来 IE 的行为与 Chrome 相同。只是没有返回任何东西,而是将所有内容设置为“自动”。如果通过 using 访问克隆对象的样式,则.css()
返回所有值0px
(包括背景等属性)。似乎只有 Mozilla 将克隆的对象视为已应用任何样式。