Extend matched elements
This commit is contained in:
parent
4dd878f237
commit
79cf30aab1
|
@ -6,91 +6,99 @@
|
|||
* A class that queries the document for elements that match a given CSS
|
||||
* selector.
|
||||
**/
|
||||
var Selector = Class.create({
|
||||
/**
|
||||
* new Selector(expression)
|
||||
* - expression (String): A CSS selector.
|
||||
*
|
||||
* Creates a `Selector` with the given CSS selector.
|
||||
**/
|
||||
initialize: function(expression) {
|
||||
this.expression = expression.strip();
|
||||
},
|
||||
|
||||
/**
|
||||
* Selector#findElements(root) -> [Element...]
|
||||
* - root (Element || document): A "scope" to search within. All results will
|
||||
* be descendants of this node.
|
||||
*
|
||||
* Searches the document for elements that match the instance's CSS
|
||||
* selector.
|
||||
**/
|
||||
findElements: function(rootElement) {
|
||||
return Sizzle(this.expression, rootElement || document);
|
||||
},
|
||||
|
||||
/**
|
||||
* Selector#match(element) -> Boolean
|
||||
*
|
||||
* Tests whether a `element` matches the instance's CSS selector.
|
||||
**/
|
||||
match: function(element) {
|
||||
return Sizzle.matches(this.expression, [element]).length == 1;
|
||||
},
|
||||
|
||||
toString: function() {
|
||||
return this.expression;
|
||||
},
|
||||
|
||||
inspect: function() {
|
||||
return "#<Selector: " + this.expression + ">";
|
||||
(function() {
|
||||
function extend(elements) {
|
||||
for (var i = 0, length = elements.length; i < length; i++)
|
||||
elements[i] = Element.extend(elements[i]);
|
||||
return elements;
|
||||
}
|
||||
});
|
||||
|
||||
Object.extend(Selector, {
|
||||
/**
|
||||
* Selector.matchElements(elements, expression) -> [Element...]
|
||||
*
|
||||
* Filters the given collection of elements with `expression`.
|
||||
*
|
||||
* The only nodes returned will be those that match the given CSS selector.
|
||||
**/
|
||||
matchElements: function(elements, expression) {
|
||||
return Sizzle.matches(expression, elements);
|
||||
},
|
||||
window.Selector = Class.create({
|
||||
/**
|
||||
* new Selector(expression)
|
||||
* - expression (String): A CSS selector.
|
||||
*
|
||||
* Creates a `Selector` with the given CSS selector.
|
||||
**/
|
||||
initialize: function(expression) {
|
||||
this.expression = expression.strip();
|
||||
},
|
||||
|
||||
/**
|
||||
* Selector.findElement(elements, expression[, index = 0]) -> Element
|
||||
* Selector.findElement(elements[, index = 0]) -> Element
|
||||
*
|
||||
* Returns the `index`th element in the collection that matches
|
||||
* `expression`.
|
||||
*
|
||||
* Returns the `index`th element overall if `expression` is not given.
|
||||
**/
|
||||
findElement: function(elements, expression, index) {
|
||||
if (Object.isUndefined(index)) index = 0;
|
||||
return Sizzle.matches(expression, elements)[index];
|
||||
},
|
||||
/**
|
||||
* Selector#findElements(root) -> [Element...]
|
||||
* - root (Element || document): A "scope" to search within. All results will
|
||||
* be descendants of this node.
|
||||
*
|
||||
* Searches the document for elements that match the instance's CSS
|
||||
* selector.
|
||||
**/
|
||||
findElements: function(rootElement) {
|
||||
return extend(Sizzle(this.expression, rootElement || document));
|
||||
},
|
||||
|
||||
/**
|
||||
* Selector.findChildElements(element, expressions) -> [Element...]
|
||||
/**
|
||||
* Selector#match(element) -> Boolean
|
||||
*
|
||||
* Tests whether a `element` matches the instance's CSS selector.
|
||||
**/
|
||||
match: function(element) {
|
||||
return Sizzle.matches(this.expression, [element]).length == 1;
|
||||
},
|
||||
|
||||
toString: function() {
|
||||
return this.expression;
|
||||
},
|
||||
|
||||
inspect: function() {
|
||||
return "#<Selector: " + this.expression + ">";
|
||||
}
|
||||
});
|
||||
|
||||
Object.extend(Selector, {
|
||||
/**
|
||||
* Selector.matchElements(elements, expression) -> [Element...]
|
||||
*
|
||||
* Filters the given collection of elements with `expression`.
|
||||
*
|
||||
* The only nodes returned will be those that match the given CSS selector.
|
||||
**/
|
||||
matchElements: function(elements, expression) {
|
||||
return extend(Sizzle.matches(expression, elements));
|
||||
},
|
||||
|
||||
/**
|
||||
* Selector.findElement(elements, expression[, index = 0]) -> Element
|
||||
* Selector.findElement(elements[, index = 0]) -> Element
|
||||
*
|
||||
* Returns the `index`th element in the collection that matches
|
||||
* `expression`.
|
||||
*
|
||||
* Returns the `index`th element overall if `expression` is not given.
|
||||
**/
|
||||
findElement: function(elements, expression, index) {
|
||||
if (Object.isUndefined(index)) index = 0;
|
||||
return Element.extend(Sizzle.matches(expression, elements)[index]);
|
||||
},
|
||||
|
||||
/**
|
||||
* Selector.findChildElements(element, expressions) -> [Element...]
|
||||
*
|
||||
* Searches beneath `element` for any elements that match the selector
|
||||
* (or selectors) specified in `expressions`.
|
||||
**/
|
||||
findChildElements: function(element, expressions) {
|
||||
var results = [], exprs = expressions.toArray();
|
||||
while (exprs.length) Sizzle(exprs.shift(), element || document, results);
|
||||
return extend(results);
|
||||
}
|
||||
});
|
||||
|
||||
/** related to: Selector
|
||||
* $$(expression...) -> [Element...]
|
||||
*
|
||||
* Searches beneath `element` for any elements that match the selector
|
||||
* (or selectors) specified in `expressions`.
|
||||
* Returns all elements in the document that match the provided CSS selectors.
|
||||
**/
|
||||
findChildElements: function(element, expressions) {
|
||||
var results = [], exprs = expressions.toArray();
|
||||
while (exprs.length) Sizzle(exprs.shift(), element || document, results);
|
||||
return results;
|
||||
window.$$ = function() {
|
||||
return Selector.findChildElements(document, $A(arguments));
|
||||
}
|
||||
});
|
||||
|
||||
/** related to: Selector
|
||||
* $$(expression...) -> [Element...]
|
||||
*
|
||||
* Returns all elements in the document that match the provided CSS selectors.
|
||||
**/
|
||||
function $$() {
|
||||
return Selector.findChildElements(document, $A(arguments)).map(Element.extend);
|
||||
}
|
||||
})();
|
||||
|
|
Loading…
Reference in New Issue