aboutsummaryrefslogtreecommitdiffstats
path: root/src/selector.js
diff options
context:
space:
mode:
authorJohn Resig <jeresig@gmail.com>2008-01-26 00:26:28 +0000
committerJohn Resig <jeresig@gmail.com>2008-01-26 00:26:28 +0000
commit5da2e98cb39f30e940962fe0bf2d23356d9f90a8 (patch)
tree12e495219e5b4b18ecfcf722cc76bf48289952d9 /src/selector.js
parent1faed11e3c0752981d8b01e1272fb3a72272f966 (diff)
downloadjquery-5da2e98cb39f30e940962fe0bf2d23356d9f90a8.tar.gz
jquery-5da2e98cb39f30e940962fe0bf2d23356d9f90a8.zip
De-eval'd selectors and the various DOM methods (will marginally help our speed and make us more compatible with projects like Caja and Adobe AIR). Left a selector eval in for backwards compatibility support of selector plugins.
Diffstat (limited to 'src/selector.js')
-rw-r--r--src/selector.js84
1 files changed, 43 insertions, 41 deletions
diff --git a/src/selector.js b/src/selector.js
index 1badc6932..2040728ce 100644
--- a/src/selector.js
+++ b/src/selector.js
@@ -8,61 +8,61 @@ var chars = jQuery.browser.safari && parseInt(jQuery.browser.version) < 417 ?
jQuery.extend({
expr: {
- "": "m[2]=='*'||jQuery.nodeName(a,m[2])",
- "#": "a.getAttribute('id')==m[2]",
+ "": function(a,i,m){return m[2]=="*"||jQuery.nodeName(a,m[2]);},
+ "#": function(a,i,m){return a.getAttribute("id")==m[2];},
":": {
// Position Checks
- lt: "i<m[3]-0",
- gt: "i>m[3]-0",
- nth: "m[3]-0==i",
- eq: "m[3]-0==i",
- first: "i==0",
- last: "i==r.length-1",
- even: "i%2==0",
- odd: "i%2",
+ lt: function(a,i,m){return i<m[3]-0;},
+ gt: function(a,i,m){return i>m[3]-0;},
+ nth: function(a,i,m){return m[3]-0==i;},
+ eq: function(a,i,m){return m[3]-0==i;},
+ first: function(a,i){return i==0;},
+ last: function(a,i,m,r){return i==r.length-1;},
+ even: function(a,i){return i%2==0;},
+ odd: function(a,i){return i%2;},
// Child Checks
- "first-child": "a.parentNode.getElementsByTagName('*')[0]==a",
- "last-child": "jQuery.nth(a.parentNode.lastChild,1,'previousSibling')==a",
- "only-child": "!jQuery.nth(a.parentNode.lastChild,2,'previousSibling')",
+ "first-child": function(a){return a.parentNode.getElementsByTagName("*")[0]==a;},
+ "last-child": function(a){return jQuery.nth(a.parentNode.lastChild,1,"previousSibling")==a;},
+ "only-child": function(a){return !jQuery.nth(a.parentNode.lastChild,2,"previousSibling");},
// Parent Checks
- parent: "a.firstChild",
- empty: "!a.firstChild",
+ parent: function(a){return a.firstChild;},
+ empty: function(a){return !a.firstChild;},
// Text Check
- contains: "(a.textContent||a.innerText||jQuery(a).text()||'').indexOf(m[3])>=0",
+ contains: function(a,i,m){return (a.textContent||a.innerText||jQuery(a).text()||"").indexOf(m[3])>=0;},
// Visibility
- visible: '"hidden"!=a.type&&jQuery.css(a,"display")!="none"&&jQuery.css(a,"visibility")!="hidden"',
- hidden: '"hidden"==a.type||jQuery.css(a,"display")=="none"||jQuery.css(a,"visibility")=="hidden"',
+ visible: function(a){return "hidden"!=a.type&&jQuery.css(a,"display")!="none"&&jQuery.css(a,"visibility")!="hidden";},
+ hidden: function(a){return "hidden"==a.type||jQuery.css(a,"display")=="none"||jQuery.css(a,"visibility")=="hidden";},
// Form attributes
- enabled: "!a.disabled",
- disabled: "a.disabled",
- checked: "a.checked",
- selected: "a.selected||jQuery.attr(a,'selected')",
+ enabled: function(a){return !a.disabled;},
+ disabled: function(a){return a.disabled;},
+ checked: function(a){return a.checked;},
+ selected: function(a){return a.selected||jQuery.attr(a,"selected");},
// Form elements
- text: "'text'==a.type",
- radio: "'radio'==a.type",
- checkbox: "'checkbox'==a.type",
- file: "'file'==a.type",
- password: "'password'==a.type",
- submit: "'submit'==a.type",
- image: "'image'==a.type",
- reset: "'reset'==a.type",
- button: '"button"==a.type||jQuery.nodeName(a,"button")',
- input: "/input|select|textarea|button/i.test(a.nodeName)",
+ text: function(a){return "text"==a.type;},
+ radio: function(a){return "radio"==a.type;},
+ checkbox: function(a){return "checkbox"==a.type;},
+ file: function(a){return "file"==a.type;},
+ password: function(a){return "password"==a.type;},
+ submit: function(a){return "submit"==a.type;},
+ image: function(a){return "image"==a.type;},
+ reset: function(a){return "reset"==a.type;},
+ button: function(a){return "button"==a.type||jQuery.nodeName(a,"button");},
+ input: function(a){return /input|select|textarea|button/i.test(a.nodeName);},
// :has()
- has: "jQuery.find(m[3],a).length",
+ has: function(a,i,m){return jQuery.find(m[3],a).length;},
// :header
- header: "/h\\d/i.test(a.nodeName)",
+ header: function(a){return /h\d/i.test(a.nodeName);},
// :animated
- animated: "jQuery.grep(jQuery.timers,function(fn){return a==fn.elem;}).length"
+ animated: function(a){return jQuery.grep(jQuery.timers,function(fn){return a==fn.elem;}).length;}
}
},
@@ -390,15 +390,17 @@ jQuery.extend({
// Otherwise, find the expression to execute
} else {
- var f = jQuery.expr[m[1]];
- if ( typeof f != "string" )
- f = jQuery.expr[m[1]][m[2]];
+ var fn = jQuery.expr[ m[1] ];
+ if ( typeof fn == "object" )
+ fn = fn[ m[2] ];
- // Build a custom macro to enclose it
- f = eval("false||function(a,i){return " + f + "}");
+ if ( typeof fn == "string" )
+ fn = eval("false||function(a,i){return " + fn + ";}");
// Execute it against the current filter
- r = jQuery.grep( r, f, not );
+ r = jQuery.grep( r, function(elem, i){
+ return fn(elem, i, m, r);
+ }, not );
}
}