// keepData is for internal use only--do not document
remove: function( selector, keepData ) {
var elem,
- i = 0,
- l = this.length;
+ elems = selector ? jQuery.filter( selector, this ) : this,
+ i = elems.length;
- for ( ; i < l; i++ ) {
- elem = this[ i ];
+ while ( i-- ) {
+ elem = elems[ i ];
- if ( !selector || jQuery.filter( selector, [ elem ] ).length > 0 ) {
- if ( !keepData && elem.nodeType === 1 ) {
- jQuery.cleanData( getAll( elem ) );
- }
+ if ( !keepData && elem.nodeType === 1 ) {
+ jQuery.cleanData( getAll( elem ) );
+ }
- if ( elem.parentNode ) {
- if ( keepData && jQuery.contains( elem.ownerDocument, elem ) ) {
- setGlobalEval( getAll( elem, "script" ) );
- }
- elem.parentNode.removeChild( elem );
+ if ( elem.parentNode ) {
+ if ( keepData && jQuery.contains( elem.ownerDocument, elem ) ) {
+ setGlobalEval( getAll( elem, "script" ) );
}
+ elem.parentNode.removeChild( elem );
}
}
});
var testRemove = function( method ) {
- var first = jQuery("#ap").children().first();
+ var markup, div,
+ first = jQuery("#ap").children().first();
first.data("foo", "bar");
jQuery("#ap").children()[ method ]("a, code");
equal( jQuery("#ap").children().length, 0, "Check multi-filtered remove" );
+ // Positional and relative selectors
+ markup = "<div><span>1</span><span>2</span><span>3</span><span>4</span></div>";
+ div = jQuery( markup );
+ div.children().remove("span:nth-child(2n)");
+ equal( div.text(), "13", "relative selector in " + method );
+ div = jQuery( markup );
+ div.children().remove("span:first");
+ equal( div.text(), "234", "positional selector in " + method );
+ div = jQuery( markup );
+ div.children().remove("span:last");
+ equal( div.text(), "123", "positional selector in " + method );
+
// using contents will get comments regular, text, and comment nodes
// Handle the case where no comment is in the document
ok( jQuery("#nonnodes").contents().length >= 2, "Check node,textnode,comment remove works" );
}
};
-test( "remove()", 8, function() {
+test( "remove()", 11, function() {
testRemove("remove");
});
cleanUp.remove();
});
-test( "detach()", 8, function() {
+test( "detach()", 11, function() {
testRemove("detach");
});