5

我有点困惑。我希望 $.css() 方法无论如何都可以将 css 属性愚蠢地添加到元素中。你知道,就像在 Chrome 开发工具中一样,当你将任何 css 属性应用到一个元素时,它就会简单地出现在 HTML 中。但显然它以某种方式检查它是否支持。例如,如果您运行以下命令:

$('#element').css('display','block'); /* returns jQuery object) */
$('#element').css('display') /* returns "block" */

但是如果你把类似的东西

$('#element').css('hurr','durr');
$('#element').css('hurr') /* returns undefined */

那么,jQuery 检查属性是否适用?

另一个例子。Opera 目前不支持 CSS 过滤器。或者是吗?好吧,我使用了这里描述的方法,令人惊讶的是它返回true了“过滤器”。然后我尝试用 $.css 应用它:

$('#element').css('filter','blur(5px)');
$('#element').css('filter') /*returns "" (an empty string) *

因此,jQuery 不仅会检查元素是否受支持,还会检查 value 是否合法。它究竟是如何做到的?检查属性是否受支持的正确方法是什么?

4

2 回答 2

5

css 函数做了很多工作来标准化每个浏览器访问各种 css 属性的不同方式——例如,W3C 的标准属性 float is cssFloat,但 Internet Explorer 将其称为styleFloat

因此,jQuery 仅适用于公认的 css 属性。filter是专有的(特定于浏览器的)属性。

于 2013-05-04T21:07:06.920 回答
4

jQuery 确实过滤掉了一些值,但在这种情况下它并不是故意这样做的。getComputedStyle()它与它如何检索样式"hurr"有关"hurr返回undefined

在 Chrome 中,样式值似乎确实存在于样式对象上,即使通过 jQuery 设置也是如此,但它没有被正确检索,.css()因为它不是真正的样式。

如果你想设置一个不支持的样式值,你可以直接使用样式对象,但是根据 jQuery 代码中的一些注释,如果你尝试设置它不知道的东西,某些版本的 IE 可能会抛出异常:

var elem = document.getElementById("element");
elem.style.hurr = "durr";
console.log(elem.style.hurr);   // in Chrome, gives you "durr"
于 2013-05-04T21:09:50.923 回答