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.

This commit is contained in:
John Resig 2008-01-26 00:26:28 +00:00
parent 1faed11e3c
commit 5da2e98cb3
2 changed files with 52 additions and 57 deletions

View File

@ -1153,11 +1153,6 @@ jQuery.extend({
}, },
grep: function( elems, callback, inv ) { grep: function( elems, callback, inv ) {
// If a string is passed in for the function, make a function
// for it (a handy shortcut)
if ( typeof callback == "string" )
callback = eval("false||function(a,i){return " + callback + "}");
var ret = []; var ret = [];
// Go through the array, only saving the items // Go through the array, only saving the items
@ -1230,18 +1225,16 @@ jQuery.extend({
}); });
jQuery.each({ jQuery.each({
parent: "elem.parentNode", parent: function(elem){return elem.parentNode;},
parents: "jQuery.dir(elem,'parentNode')", parents: function(elem){return jQuery.dir(elem,"parentNode");},
next: "jQuery.nth(elem,2,'nextSibling')", next: function(elem){return jQuery.nth(elem,2,"nextSibling");},
prev: "jQuery.nth(elem,2,'previousSibling')", prev: function(elem){return jQuery.nth(elem,2,"previousSibling");},
nextAll: "jQuery.dir(elem,'nextSibling')", nextAll: function(elem){return jQuery.dir(elem,"nextSibling");},
prevAll: "jQuery.dir(elem,'previousSibling')", prevAll: function(elem){return jQuery.dir(elem,"previousSibling");},
siblings: "jQuery.sibling(elem.parentNode.firstChild,elem)", siblings: function(elem){return jQuery.sibling(elem.parentNode.firstChild,elem);},
children: "jQuery.sibling(elem.firstChild)", children: function(elem){return jQuery.sibling(elem.firstChild);},
contents: "jQuery.nodeName(elem,'iframe')?elem.contentDocument||elem.contentWindow.document:jQuery.makeArray(elem.childNodes)" contents: function(elem){return jQuery.nodeName(elem,"iframe")?elem.contentDocument||elem.contentWindow.document:jQuery.makeArray(elem.childNodes);}
}, function(name, fn){ }, function(name, fn){
fn = eval("false||function(elem){return " + fn + "}");
jQuery.fn[ name ] = function( selector ) { jQuery.fn[ name ] = function( selector ) {
var ret = jQuery.map( this, fn ); var ret = jQuery.map( this, fn );

View File

@ -8,61 +8,61 @@ var chars = jQuery.browser.safari && parseInt(jQuery.browser.version) < 417 ?
jQuery.extend({ jQuery.extend({
expr: { expr: {
"": "m[2]=='*'||jQuery.nodeName(a,m[2])", "": function(a,i,m){return m[2]=="*"||jQuery.nodeName(a,m[2]);},
"#": "a.getAttribute('id')==m[2]", "#": function(a,i,m){return a.getAttribute("id")==m[2];},
":": { ":": {
// Position Checks // Position Checks
lt: "i<m[3]-0", lt: function(a,i,m){return i<m[3]-0;},
gt: "i>m[3]-0", gt: function(a,i,m){return i>m[3]-0;},
nth: "m[3]-0==i", nth: function(a,i,m){return m[3]-0==i;},
eq: "m[3]-0==i", eq: function(a,i,m){return m[3]-0==i;},
first: "i==0", first: function(a,i){return i==0;},
last: "i==r.length-1", last: function(a,i,m,r){return i==r.length-1;},
even: "i%2==0", even: function(a,i){return i%2==0;},
odd: "i%2", odd: function(a,i){return i%2;},
// Child Checks // Child Checks
"first-child": "a.parentNode.getElementsByTagName('*')[0]==a", "first-child": function(a){return a.parentNode.getElementsByTagName("*")[0]==a;},
"last-child": "jQuery.nth(a.parentNode.lastChild,1,'previousSibling')==a", "last-child": function(a){return jQuery.nth(a.parentNode.lastChild,1,"previousSibling")==a;},
"only-child": "!jQuery.nth(a.parentNode.lastChild,2,'previousSibling')", "only-child": function(a){return !jQuery.nth(a.parentNode.lastChild,2,"previousSibling");},
// Parent Checks // Parent Checks
parent: "a.firstChild", parent: function(a){return a.firstChild;},
empty: "!a.firstChild", empty: function(a){return !a.firstChild;},
// Text Check // 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 // Visibility
visible: '"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: '"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 // Form attributes
enabled: "!a.disabled", enabled: function(a){return !a.disabled;},
disabled: "a.disabled", disabled: function(a){return a.disabled;},
checked: "a.checked", checked: function(a){return a.checked;},
selected: "a.selected||jQuery.attr(a,'selected')", selected: function(a){return a.selected||jQuery.attr(a,"selected");},
// Form elements // Form elements
text: "'text'==a.type", text: function(a){return "text"==a.type;},
radio: "'radio'==a.type", radio: function(a){return "radio"==a.type;},
checkbox: "'checkbox'==a.type", checkbox: function(a){return "checkbox"==a.type;},
file: "'file'==a.type", file: function(a){return "file"==a.type;},
password: "'password'==a.type", password: function(a){return "password"==a.type;},
submit: "'submit'==a.type", submit: function(a){return "submit"==a.type;},
image: "'image'==a.type", image: function(a){return "image"==a.type;},
reset: "'reset'==a.type", reset: function(a){return "reset"==a.type;},
button: '"button"==a.type||jQuery.nodeName(a,"button")', button: function(a){return "button"==a.type||jQuery.nodeName(a,"button");},
input: "/input|select|textarea|button/i.test(a.nodeName)", input: function(a){return /input|select|textarea|button/i.test(a.nodeName);},
// :has() // :has()
has: "jQuery.find(m[3],a).length", has: function(a,i,m){return jQuery.find(m[3],a).length;},
// :header // :header
header: "/h\\d/i.test(a.nodeName)", header: function(a){return /h\d/i.test(a.nodeName);},
// :animated // :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 // Otherwise, find the expression to execute
} else { } else {
var f = jQuery.expr[m[1]]; var fn = jQuery.expr[ m[1] ];
if ( typeof f != "string" ) if ( typeof fn == "object" )
f = jQuery.expr[m[1]][m[2]]; fn = fn[ m[2] ];
// Build a custom macro to enclose it if ( typeof fn == "string" )
f = eval("false||function(a,i){return " + f + "}"); fn = eval("false||function(a,i){return " + fn + ";}");
// Execute it against the current filter // 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 );
} }
} }