我有点困惑。我希望从$ .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检查元素是否受支持,甚至检查值是否合法。它到底是怎么做到的?检查属性是否受支持的正确方法是什么?
答案 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"