为什么jQuery.css不支持属性,如果它不受支持,如何检查?

时间:2013-05-04 21:00:39

标签: jquery css

我有点困惑。我希望从$ .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过滤器。或者是吗?好吧,我使用了method described here,令人惊讶的是,它返回true代表'过滤器'。然后我尝试用$ .css:

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

因此,不仅jQuery检查元素是否受支持,甚至检查值是否合法。它到底是怎么做到的?检查属性是否受支持的正确方法是什么?

2 个答案:

答案 0 :(得分:5)

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

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

答案 1 :(得分:4)

jQuery确实过滤掉了一些值,但在这种情况下并没有故意这样做。它与使用getComputedStyle()检索样式的方式有关,"hurr"显然知道"hurr不是有效样式,因此它不会作为其中一部分返回,然后当jQuery查找{{1}时“在计算的样式中,它不存在,因此返回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"