1

我在这里设置了一个演示:http: //jsbin.com/evifeb/

这更多的是我大声思考而不是一个正确的问题,但是..

为什么浏览器将样式规则与边方法和保留字一起直接插入计算样式对象中?它只是使解析变得困难。例如,您可能会在我的演示中注意到,我过滤掉了除字符串和数字之外的所有内容。这是为了清除同一范围内的函数。虽然,这不是 100% 准确的,因为长度属性值是一个数字。为什么没有像“getAllStyles”这样的原型函数,它返回一个没有废话的样式对象?

好的,所以我知道“getPropertyValue”,但这仅在您想要指定的样式规则时才有用。所以我想我想说的是:A)是否有适当的方法来返回这样的交叉对象浏览器安全吗?和 B)如果没有,除了长度之外是否还有其他属性(不在 css 规范中)需要清除?

非常感谢帮忙。我已经准备好拔牙了。

4

1 回答 1

6

听起来您的for循环需要健康剂量的Object.hasOwnProperty.

总的来说,使用hasOwnProperty()过滤器可以解决问题,但它解决的是症状,而不是原因。原因是您的代码使用循环for...in来迭代数组。不要这样做。

用于for...in迭代对象,并用于for迭代数组。


最后一件事:getComputedStyle()返回一个(只读)实例CSSStyleDeclaration。使用提供的 API,事情就很简单了:

for (var i=0; i<computedStyles.length; i++)
{        
    cssProperty = computedStyles[i];
    cssValue = computedStyles.getPropertyValue(cssProperty);
    // snip...
}

演示:http: //jsbin.com/owenij/2

于 2011-10-14T20:06:04.833 回答