Added .filter("expr",ifCallback,elseCallback) (works for find, not, clone, add, etc.).
Fixed bug in Makefile. Fixed bug in expression parsing. Removed need for Q in expression parsing.
This commit is contained in:
parent
ad2a6bd916
commit
9203775234
2
Makefile
2
Makefile
|
@ -68,7 +68,7 @@ test: ${JQ}
|
||||||
@@rm -f ${TEST_DIR}/tests/*
|
@@rm -f ${TEST_DIR}/tests/*
|
||||||
|
|
||||||
@@echo " - Copying over script files."
|
@@echo " - Copying over script files."
|
||||||
@@cp -fR ${BUILD_DIR}/test/js ${TEST_DIR}/js
|
@@cp -fR ${BUILD_DIR}/test/data ${TEST_DIR}/data
|
||||||
@@cp -f ${BUILD_DIR}/test/index.html ${TEST_DIR}
|
@@cp -f ${BUILD_DIR}/test/index.html ${TEST_DIR}
|
||||||
|
|
||||||
@@echo " - Compiling Test Cases"
|
@@echo " - Compiling Test Cases"
|
||||||
|
|
49
src/jquery/jquery.js
vendored
49
src/jquery/jquery.js
vendored
|
@ -976,6 +976,12 @@ jQuery.fn = jQuery.prototype = {
|
||||||
* @result $("p").filter(".selected") == [ <p class="selected">Hello</p> ]
|
* @result $("p").filter(".selected") == [ <p class="selected">Hello</p> ]
|
||||||
*
|
*
|
||||||
* @test isSet( $("input").filter(":checked").get(), q("radio2", "check1"), "Filter elements" );
|
* @test isSet( $("input").filter(":checked").get(), q("radio2", "check1"), "Filter elements" );
|
||||||
|
* @test $("input").filter(":checked",function(i){
|
||||||
|
* ok( this == q("radio2", "check1")[i], "Filter elements, context" );
|
||||||
|
* });
|
||||||
|
* @test $("#main > p#ap > a").filter("#foobar",function(){},function(i){
|
||||||
|
* ok( this == q("google","groups", "mark")[i], "Filter elements, else context" );
|
||||||
|
* });
|
||||||
*
|
*
|
||||||
* @name filter
|
* @name filter
|
||||||
* @type jQuery
|
* @type jQuery
|
||||||
|
@ -1247,17 +1253,23 @@ jQuery.fn = jQuery.prototype = {
|
||||||
*/
|
*/
|
||||||
pushStack: function(a,args) {
|
pushStack: function(a,args) {
|
||||||
var fn = args && args[args.length-1];
|
var fn = args && args[args.length-1];
|
||||||
|
var fn2 = args && args[args.length-2];
|
||||||
|
|
||||||
if ( !fn || fn.constructor != Function ) {
|
if ( fn && fn.constructor != Function ) fn = null;
|
||||||
|
if ( fn2 && fn2.constructor != Function ) fn2 = null;
|
||||||
|
|
||||||
|
if ( !fn ) {
|
||||||
if ( !this.stack ) this.stack = [];
|
if ( !this.stack ) this.stack = [];
|
||||||
this.stack.push( this.get() );
|
this.stack.push( this.get() );
|
||||||
this.get( a );
|
this.get( a );
|
||||||
} else {
|
} else {
|
||||||
var old = this.get();
|
var old = this.get();
|
||||||
this.get( a );
|
this.get( a );
|
||||||
if ( typeof fn == "function" )
|
|
||||||
this.each( fn );
|
if ( fn2 && a.length || !fn2 )
|
||||||
this.get( old );
|
this.each( fn2 || fn ).get( old );
|
||||||
|
else
|
||||||
|
this.get( old ).each( fn );
|
||||||
}
|
}
|
||||||
|
|
||||||
return this;
|
return this;
|
||||||
|
@ -1880,13 +1892,13 @@ jQuery.extend({
|
||||||
// The regular expressions that power the parsing engine
|
// The regular expressions that power the parsing engine
|
||||||
parse: [
|
parse: [
|
||||||
// Match: [@value='test'], [@foo]
|
// Match: [@value='test'], [@foo]
|
||||||
"\\[ *(@)S *([!*$^=]*)Q\\]",
|
"\\[ *(@)S *([!*$^=]*) *('?\"?)(.*?)\\4 *\\]",
|
||||||
|
|
||||||
// Match: [div], [div p]
|
// Match: [div], [div p]
|
||||||
"(\\[)Q\\]",
|
"(\\[)\s*(.*?)\s*\\]",
|
||||||
|
|
||||||
// Match: :contains('foo')
|
// Match: :contains('foo')
|
||||||
"(:)S\\(Q\\)",
|
"(:)S\\(\"?'?([^\\)]*?)\"?'?\\)",
|
||||||
|
|
||||||
// Match: :even, :last-chlid
|
// Match: :even, :last-chlid
|
||||||
"([:.#]*)S"
|
"([:.#]*)S"
|
||||||
|
@ -1902,28 +1914,19 @@ jQuery.extend({
|
||||||
var p = jQuery.parse;
|
var p = jQuery.parse;
|
||||||
|
|
||||||
for ( var i = 0; i < p.length; i++ ) {
|
for ( var i = 0; i < p.length; i++ ) {
|
||||||
// get number for backreference
|
|
||||||
var br = 0;
|
|
||||||
if(p[i].indexOf('Q') != -1){
|
|
||||||
br = p[i].replace(/\\\(/g,'').match(/\(|S/g).length+1;
|
|
||||||
}
|
|
||||||
var re = new RegExp( "^" + p[i]
|
|
||||||
|
|
||||||
// Look for a string-like sequence
|
// Look for, and replace, string-like sequences
|
||||||
.replace( 'S', "([a-z*_-][a-z0-9_-]*)" )
|
// and finally build a regexp out of it
|
||||||
|
var re = new RegExp(
|
||||||
// Look for something (optionally) enclosed with quotes
|
"^" + p[i].replace("S", "([a-z*_-][a-z0-9_-]*)"), "i" );
|
||||||
.replace( 'Q', " *('|\"|)([^'\"]*?)\\"+br+" *" ), "i" );
|
|
||||||
|
|
||||||
var m = re.exec( t );
|
var m = re.exec( t );
|
||||||
|
|
||||||
if ( m ) {
|
if ( m ) {
|
||||||
// Re-organize the match
|
// Re-organize the first match
|
||||||
if(br == 4){
|
if ( !i )
|
||||||
m = ["",m[1], m[3], m[2], m[5]];
|
m = ["",m[1], m[3], m[2], m[5]];
|
||||||
} else if(br != 0) {
|
|
||||||
m.splice(br,1);
|
|
||||||
}
|
|
||||||
// Remove what we just matched
|
// Remove what we just matched
|
||||||
t = t.replace( re, "" );
|
t = t.replace( re, "" );
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue