javascript - What does {x:expression(...)} do? -
this question has answer here:
i came across polyfill of queryselectorall
ie7:
https://gist.github.com/connrs/2724353
i had thought okayish in javascript, have never seen quoted part in line 9 of polyfill:
{x:expression(document.__qsaels.push(this))}
apparently, javascript object key x
, value expression(document.__qsaels.push(this))
, other know, mysterious me. expression
function do? not able find close via google.
you looking @ generated css rule. not javascript object, css declaration block.
the line
styletag.stylesheet.csstext = selector + "{x:expression(document.__qsaels.push(this))}";
concatenates css selector declaration block string of css. declaration block contains dummy css property called x
value of expression(document.__qsaels.push(this))
.
what expression()
is, non-standard feature of old versions of ie allows author execute arbitrary javascript directly , obtain value use within css. while entire string css declaration block, document.__qsaels.push(this)
in fact javascript expression.
what expression does, push element matching css selector __qsaels
array polyfill can return set of elements matched selector.1 this, in essence, how polyfill works.
as concrete example, calling polyfilled document.queryselectorall(".foo")
causes ie7 append following css document stylesheet:
.foo{x:expression(document.__qsaels.push(this))}
with indentation , newlines resembles conventional css:
.foo { x: expression(document.__qsaels.push(this)) }
here can see css rule apply element matches .foo
, causing each element added __qsaels
before returned.
1 for whatever reason, ie seems happy execute expression()
statements on unknown properties (afaik there isn't such property called x
on ie7, know?).
Comments
Post a Comment