return first;
},
- unique: function( array ) {
- var ret = [], done = {}, id;
-
- try {
- for ( var i = 0, length = array.length; i < length; i++ ) {
- id = jQuery.data( array[ i ] );
-
- if ( !done[ id ] ) {
- done[ id ] = true;
- ret.push( array[ i ] );
- }
- }
- } catch( e ) {
- ret = array;
- }
-
- return ret;
- },
-
grep: function( elems, callback, inv ) {
var ret = [];
var id = elem[ expando ], cache = jQuery.cache, thisCache;\r
\r
// Handle the case where there's no name immediately\r
- if ( !name ) {\r
- return id;\r
+ if ( !name && !id ) {\r
+ return null;\r
}\r
\r
// Compute a unique ID for the element\r
thisCache[ name ] = data;\r
}\r
\r
- return name === true ? thisCache : thisCache[ name ];\r
+ return name ? thisCache[ name ] : thisCache;\r
},\r
\r
removeData: function( elem, name ) {\r
\r
jQuery.fn.extend({\r
data: function( key, value ){\r
- if(typeof key === "undefined" && this.length) return jQuery.data(this[0], true);\r
+ if ( typeof key === "undefined" && this.length ) {\r
+ return jQuery.data( this[0] );\r
+ }\r
\r
var parts = key.split(".");\r
parts[1] = parts[1] ? "." + parts[1] : "";\r
clearQueue: function(type){\r
return this.queue( type || "fx", [] );\r
}\r
-});
\ No newline at end of file
+});\r
return this.domManip(arguments, false, function(elem){
this.parentNode.insertBefore( elem, this );
});
- } else {
- var set = jQuery.isFunction(arguments[0]) ?
- jQuery( arguments[0]() ) :
- jQuery.apply(jQuery, arguments);
-
- return this.pushStack( set.add( this ), "before", arguments );
+ } else if ( arguments.length ) {
+ var set = jQuery(arguments[0]);
+ set.push.apply( set, this.toArray() );
+ return this.pushStack( set, "before", arguments );
}
},
return this.domManip(arguments, false, function(elem){
this.parentNode.insertBefore( elem, this.nextSibling );
});
- } else {
- return jQuery.isFunction(arguments[0]) ?
- this.add( arguments[0]() ) :
- this.add.apply( this, arguments );
+ } else if ( arguments.length ) {
+ var set = this.pushStack( this, "after", arguments );
+ set.push.apply( set, jQuery(arguments[0]).toArray() );
+ return set;
}
},
}
}
}
+
+ return results;
};
Sizzle.matches = function(expr, set){
if ( document.documentElement.compareDocumentPosition ) {
sortOrder = function( a, b ) {
+ if ( !a.compareDocumentPosition || !b.compareDocumentPosition ) {
+ if ( a == b ) {
+ hasDuplicate = true;
+ }
+ return 0;
+ }
+
var ret = a.compareDocumentPosition(b) & 4 ? -1 : a === b ? 0 : 1;
if ( ret === 0 ) {
hasDuplicate = true;
};
} else if ( "sourceIndex" in document.documentElement ) {
sortOrder = function( a, b ) {
+ if ( !a.sourceIndex || !b.sourceIndex ) {
+ if ( a == b ) {
+ hasDuplicate = true;
+ }
+ return 0;
+ }
+
var ret = a.sourceIndex - b.sourceIndex;
if ( ret === 0 ) {
hasDuplicate = true;
};
} else if ( document.createRange ) {
sortOrder = function( a, b ) {
+ if ( !a.ownerDocument || !b.ownerDocument ) {
+ if ( a == b ) {
+ hasDuplicate = true;
+ }
+ return 0;
+ }
+
var aRange = a.ownerDocument.createRange(), bRange = b.ownerDocument.createRange();
aRange.selectNode(a);
aRange.collapse(true);
return r;
};
+jQuery.unique = Sizzle.uniqueSort;
+
return;
window.Sizzle = Sizzle;
},
add: function( selector ) {
- return this.pushStack( jQuery.unique( jQuery.merge(
- this.get(),
- typeof selector === "string" ?
+ var set = typeof selector === "string" ?
jQuery( selector ) :
- jQuery.makeArray( selector )
- )));
+ jQuery.makeArray( selector ),
+ all = jQuery.merge( this.get(), set );
+
+ return this.pushStack( set[0] && (set[0].setInterval || set[0].nodeType === 9 || (set[0].parentNode && set[0].parentNode.nodeType !== 11)) ?
+ jQuery.unique( all ) :
+ all );
},
eq: function( i ) {
jQuery.fn[ name ] = function( selector ) {
var ret = jQuery.map( this, fn );
- if ( selector && typeof selector == "string" )
+ if ( selector && typeof selector === "string" ) {
ret = jQuery.multiFilter( selector, ret );
+ }
+
+ ret = this.length > 1 ? jQuery.unique( ret ) : ret;
+
+ if ( name === "parents" && this.length > 1 ) {
+ ret = ret.reverse();
+ }
- return this.pushStack( jQuery.unique( ret ), name, selector );
+ return this.pushStack( ret, name, selector );
};
});
})
test("add(String|Element|Array|undefined)", function() {
- expect(12);
+ expect(16);
isSet( jQuery("#sndp").add("#en").add("#sap").get(), q("sndp", "en", "sap"), "Check elements from document" );
isSet( jQuery("#sndp").add( jQuery("#en")[0] ).add( jQuery("#sap") ).get(), q("sndp", "en", "sap"), "Check elements from document" );
ok( jQuery([]).add(jQuery("#form")[0].elements).length >= 13, "Check elements from array" );
// use jQuery([]).add(form.elements) instead.
//equals( jQuery([]).add(jQuery("#form")[0].elements).length, jQuery(jQuery("#form")[0].elements).length, "Array in constructor must equals array in add()" );
+ var tmp = jQuery("<div/>");
+
+ var x = jQuery([]).add(jQuery("<p id='x1'>xxx</p>").appendTo(tmp)).add(jQuery("<p id='x2'>xxx</p>").appendTo(tmp));
+ equals( x[0].id, "x1", "Check on-the-fly element1" );
+ equals( x[1].id, "x2", "Check on-the-fly element2" );
+
+ var x = jQuery([]).add(jQuery("<p id='x1'>xxx</p>").appendTo(tmp)[0]).add(jQuery("<p id='x2'>xxx</p>").appendTo(tmp)[0]);
+ equals( x[0].id, "x1", "Check on-the-fly element1" );
+ equals( x[1].id, "x2", "Check on-the-fly element2" );
+
var x = jQuery([]).add(jQuery("<p id='x1'>xxx</p>")).add(jQuery("<p id='x2'>xxx</p>"));
equals( x[0].id, "x1", "Check on-the-fly element1" );
equals( x[1].id, "x2", "Check on-the-fly element2" );
jQuery.data(div, "test", "success");\r
equals( jQuery.data(div, "test"), "success", "Check for added data" );\r
\r
- var data = jQuery.data(div, true);\r
+ var data = jQuery.data(div);\r
same( data, { "test": "success" }, "Return complete data set" );\r
\r
jQuery.data(div, "test", "overwritten");\r
jQuery('#yahoo').before(val( jQuery("#first, #mark") ));
equals( expected, jQuery('#en').text(), "Insert jQuery before" );
- var set = jQuery("<div/>").before(val("<span>test</span>"));
+ var set = jQuery("<div/>").before("<span>test</span>");
equals( set[0].nodeName.toLowerCase(), "span", "Insert the element before the disconnected node." );
equals( set.length, 2, "Insert the element before the disconnected node." );
}
jQuery('#yahoo').after(val( jQuery("#first, #mark") ));
equals( expected, jQuery('#en').text(), "Insert jQuery after" );
- var set = jQuery("<div/>").after(val("<span>test</span>"));
+ var set = jQuery("<div/>").after("<span>test</span>");
equals( set[1].nodeName.toLowerCase(), "span", "Insert the element after the disconnected node." );
equals( set.length, 2, "Insert the element after the disconnected node." );
};
test("andSelf()", function() {
expect(4);
- isSet( jQuery("#en").siblings().andSelf().get(), q("sndp", "sap","en"), "Check for siblings and self" );
- isSet( jQuery("#foo").children().andSelf().get(), q("sndp", "en", "sap", "foo"), "Check for children and self" );
+ isSet( jQuery("#en").siblings().andSelf().get(), q("sndp", "en", "sap"), "Check for siblings and self" );
+ isSet( jQuery("#foo").children().andSelf().get(), q("foo", "sndp", "en", "sap"), "Check for children and self" );
isSet( jQuery("#sndp, #en").parent().andSelf().get(), q("foo","sndp","en"), "Check for parent and self" );
isSet( jQuery("#groups").parents("p, div").andSelf().get(), q("main", "ap", "groups"), "Check for parents and self" );
});
isSet( jQuery("#sndp").siblings(":has(code)").get(), q("sap"), "Check for filtered siblings (has code child element)" );
isSet( jQuery("#sndp").siblings(":has(a)").get(), q("en", "sap"), "Check for filtered siblings (has anchor child element)" );
isSet( jQuery("#foo").siblings("form, b").get(), q("form", "floatTest", "lengthtest", "name-tests", "testForm"), "Check for multiple filters" );
- var set = q("en", "sap", "sndp");
+ var set = q("sndp", "en", "sap");
isSet( jQuery("#en, #sndp").siblings().get(), set, "Check for unique results from siblings" );
});