Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript {x:expression(…)}做什么?_Javascript_Expression - Fatal编程技术网

Javascript {x:expression(…)}做什么?

Javascript {x:expression(…)}做什么?,javascript,expression,Javascript,Expression,我遇到了IE7的queryselectoral多填充: 我本以为我在JavaScript中是Okayish,但我从未见过类似polyfill第9行中引用的部分: {x:expression(document.__qsaels.push(this))} 显然,它是一个JavaScript对象,具有keyx和value表达式(document.\uqsaels.push(this)),但除了我所知道的这一点,它对我来说是神秘的。这个表达式函数做什么?我无法通过谷歌找到任何接近的内容。您正在查看生

我遇到了IE7的
queryselectoral
多填充:

我本以为我在JavaScript中是Okayish,但我从未见过类似polyfill第9行中引用的部分:

{x:expression(document.__qsaels.push(this))}

显然,它是一个JavaScript对象,具有key
x
和value
表达式(document.\uqsaels.push(this))
,但除了我所知道的这一点,它对我来说是神秘的。这个
表达式
函数做什么?我无法通过谷歌找到任何接近的内容。

您正在查看生成的CSS规则。这不是一个JavaScript对象,而是一个CSS声明块

线路

styleTag.styleSheet.cssText = selector + "{x:expression(document.__qsaels.push(this))}";
将带有声明块的CSS选择器连接到CSS字符串中。声明块包含一个名为
x
的伪CSS属性,其值为
expression(document.\uqsaels.push(this))

expression()
是旧版IE的一项非标准功能,它允许作者直接执行任意JavaScript并获取CSS中使用的值。因此,虽然整个字符串是一个CSS声明块,
document.\uu qsaels.push(this)
实际上是一个JavaScript表达式

此表达式的作用是将与CSS选择器匹配的任何元素推送到
\uqsaels
数组中,以便polyfill可以将其作为选择器匹配的元素集返回。1本质上,这就是polyfill的工作方式

例如,调用polyfilled
document.querySelectorAll(“.foo”)
会导致IE7将以下CSS附加到文档样式表中:

.foo{x:expression(document.__qsaels.push(this))}
带有一些缩进和换行符,因此它类似于传统的CSS:

.foo {
  x: expression(document.__qsaels.push(this))
}
在这里,您可以看到此CSS规则将应用于与
.foo
匹配的任何元素,从而使每个元素在返回之前都添加到
\uu qsaels



1无论出于何种原因,IE似乎很乐意在未知属性上执行
expression()
语句(假设即使在IE7上也没有名为
x
的属性,但我知道什么?).

还要记住,
x
的值不是表达式函数,而是它的结果。我知道代码被附加到样式表中。不知道为什么。@MikeC:是的,我明白了。这个类似的问题提供了指向CSS表达式的指针,感谢您的挖掘。以前有人偶然发现过它。这是一个相当天才的polyfill。Mike C,但它不像ptdixon在那里提到的那样工作。@Stack0Overflow它在怪癖模式下工作。所以这不是一个完美的解决方案,但我不知道你甚至可以在旧IE中做到这一点。@BoltClock:非常感谢。现在我了解到它实际上是css表达式,而不是JavaScript,我能够挖掘出一些东西。还在研究。