mirror of
https://github.com/jquery/jquery.git
synced 2024-11-23 02:54:22 +00:00
Fix #13721. Filter before .remove() loop so positionals work. Close gh-1221.
This commit is contained in:
parent
5031c9db4b
commit
1b61026650
@ -72,13 +72,12 @@ jQuery.fn.extend({
|
|||||||
// keepData is for internal use only--do not document
|
// keepData is for internal use only--do not document
|
||||||
remove: function( selector, keepData ) {
|
remove: function( selector, keepData ) {
|
||||||
var elem,
|
var elem,
|
||||||
i = 0,
|
elems = selector ? jQuery.filter( selector, this ) : this,
|
||||||
l = this.length;
|
i = elems.length;
|
||||||
|
|
||||||
for ( ; i < l; i++ ) {
|
while ( i-- ) {
|
||||||
elem = this[ i ];
|
elem = elems[ i ];
|
||||||
|
|
||||||
if ( !selector || jQuery.filter( selector, [ elem ] ).length > 0 ) {
|
|
||||||
if ( !keepData && elem.nodeType === 1 ) {
|
if ( !keepData && elem.nodeType === 1 ) {
|
||||||
jQuery.cleanData( getAll( elem ) );
|
jQuery.cleanData( getAll( elem ) );
|
||||||
}
|
}
|
||||||
@ -90,7 +89,6 @@ jQuery.fn.extend({
|
|||||||
elem.parentNode.removeChild( elem );
|
elem.parentNode.removeChild( elem );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
return this;
|
return this;
|
||||||
},
|
},
|
||||||
|
@ -1713,7 +1713,8 @@ test( "clone()/html() don't expose jQuery/Sizzle expandos (#12858)", function()
|
|||||||
});
|
});
|
||||||
|
|
||||||
var testRemove = function( method ) {
|
var testRemove = function( method ) {
|
||||||
var first = jQuery("#ap").children().first();
|
var markup, div,
|
||||||
|
first = jQuery("#ap").children().first();
|
||||||
|
|
||||||
first.data("foo", "bar");
|
first.data("foo", "bar");
|
||||||
|
|
||||||
@ -1731,6 +1732,18 @@ var testRemove = function( method ) {
|
|||||||
jQuery("#ap").children()[ method ]("a, code");
|
jQuery("#ap").children()[ method ]("a, code");
|
||||||
equal( jQuery("#ap").children().length, 0, "Check multi-filtered remove" );
|
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
|
// using contents will get comments regular, text, and comment nodes
|
||||||
// Handle the case where no comment is in the document
|
// Handle the case where no comment is in the document
|
||||||
ok( jQuery("#nonnodes").contents().length >= 2, "Check node,textnode,comment remove works" );
|
ok( jQuery("#nonnodes").contents().length >= 2, "Check node,textnode,comment remove works" );
|
||||||
@ -1743,7 +1756,7 @@ var testRemove = function( method ) {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
test( "remove()", 8, function() {
|
test( "remove()", 11, function() {
|
||||||
testRemove("remove");
|
testRemove("remove");
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -1762,7 +1775,7 @@ test( "remove() event cleaning ", 1, function() {
|
|||||||
cleanUp.remove();
|
cleanUp.remove();
|
||||||
});
|
});
|
||||||
|
|
||||||
test( "detach()", 8, function() {
|
test( "detach()", 11, function() {
|
||||||
testRemove("detach");
|
testRemove("detach");
|
||||||
});
|
});
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user