A small, fast, standard compilant, cross-browser implementation of an CSS3 Query Selector
A small, fast, standard compilant, cross-browser implementation of an CSS3 Query Selector.
Currently the Selector API
(querySelectorAll
) is only available in browsers based on
WebKit (Safari and
Chrome) and the soon to be released Firefox 3.1 and
Internet Explorer 8. Similar selectors are also available in frameworks like
base2, Dojo,
Ext, jQuery,
MooTools and Prototype.
But, if you want to use query selection today without the bulky frameworks, our stand-alone selector is for you.
For fast queries, our implementation uses either DOM Level 3 XPath
or pre-compiled JavaScript DOM traversal.
The matched Element
’s is always returned in a standard
Array
so iteration functions like
forEach
can be used.
And to ease integration with other frameworks, the Selector
class has hook functions to extend the result
Element
’s (patchElement
) and Array
(patchArray
).
Selector.js supports all
Simple selectors
and Attribute selectors without namespace, all
Combinators,
Class selectors,
ID selectors and all
Pseudo-class selectors except the
Dynamic pseudo-classes :hover
and :visited
,
which isn’t possible with JavaScript/DOM. The other frameworks support a non-standard pseudo-selector
:contains()
and attribute compare operator !=
, ours don’t.
Intuitive usage, context node (document) optional:
// Normal constructor syntax: new Selector('div > p').exec(document).forEach(function (e) { e.style.color = 'red'; }); // Or, the shorthand syntax: Selector('div > p', document).forEach(function (e) { e.style.color = 'red'; });
compareDocumentPosition
.RegEx
for attribute comparison in Internet Explorer, it’s faster.:nth-
indexing and lookup, maybe index elements when traversing.:active
, :focus
, :root
and :target)
selector speed by accessing them directly, avoiding traversal.
Fixed bug when matching *
elements with -of-type
pseudo selectors. Better syntax error reporting.#id
, :active
, :focus
, :root
and :target
speed by exiting all ancestor selections when the match is found.patchElement
and optional function, only calling it when defined.
Not using sourceIndex
as node hash. Direct insert into array instead of using push
.getElementById
in
Internet Explorer since it also matches name
attribute.The generated online documentation can be found here.
Apache License, Version 2.0 <http://www.apache.org/licenses/LICENSE-2.0>
Henrik Lindqvist <henrik.lindqvist@llamalab.com>