X-Git-Url: http://git.asbjorn.biz/?a=blobdiff_plain;f=src%2Fselector%2Fselector.js;h=40ac53dfa1c0e91560c6240b232be13346393ca3;hb=75b6bcdb4206fc8cb0bd4294bdc9fef87c44325d;hp=4633c3094c23ca14132159cfb3311ce88fb83f67;hpb=c3d8cb0c09c2d7d5f0fc3a78f8b4cef9b0adc640;p=jquery.git diff --git a/src/selector/selector.js b/src/selector/selector.js index 4633c30..40ac53d 100644 --- a/src/selector/selector.js +++ b/src/selector/selector.js @@ -59,7 +59,7 @@ jQuery.extend({ _resort: function(m){ return ["", m[1], m[3], m[2], m[5]]; }, - _prefix: "z=jQuery.attr(a,m[3]);" + _prefix: "z=a[m[3]]||jQuery.attr(a,m[3]);" }, "[": "jQuery.find(m[2],a).length" }, @@ -70,10 +70,10 @@ jQuery.extend({ "\\[ *(@)S *([!*$^=]*) *('?\"?)(.*?)\\4 *\\]", // Match: [div], [div p] - "(\\[)\\s*(.*?)\\s*\\]", + "(\\[)\\s*(.*?(\\[.*?\\])?[^[]*?)\\s*\\]", // Match: :contains('foo') - "(:)S\\(\"?'?([^\\)]*?)\"?'?\\)", + "(:)S\\(\"?'?(.*?(\\(.*?\\))?[^(]*?)\"?'?\\)", // Match: :even, :last-chlid "([:.#]*)S" @@ -89,6 +89,19 @@ jQuery.extend({ } ], + multiFilter: function( expr, elems, not ) { + var old, cur = []; + + while ( expr && expr != old ) { + old = expr; + var f = jQuery.filter( expr, elems, not ); + expr = f.t.replace(/^\s*,\s*/, "" ); + cur = not ? elems = f.r : jQuery.merge( cur, f.r ); + } + + return cur; + }, + /** * @name $.find * @type Array @@ -101,7 +114,7 @@ jQuery.extend({ return [ t ]; // Make sure that the context is a DOM Element - if ( context && context.nodeType == undefined ) + if ( context && !context.nodeType ) context = null; // Set the correct context (if none is provided) @@ -214,10 +227,6 @@ jQuery.extend({ ret = r = oid && (!m[3] || oid.nodeName == m[3].toUpperCase()) ? [oid] : []; - // Use the DOM 0 shortcut for the body element - } else if ( m[1] == "" && m[2] == "body" ) { - ret = r = [ document.body ]; - } else { // Pre-compile a regular expression to handle class searches if ( m[1] == "." ) @@ -423,4 +432,4 @@ jQuery.extend({ return r; } -}); \ No newline at end of file +});