mirror of
https://github.com/jquery/jquery.git
synced 2024-11-23 02:54:22 +00:00
Core:Selector: Move jQuery.contains from the selector to the core module
The `jQuery.contains` method is quite simple in jQuery 4+. On the other side, it's a dependency of the core `isAttached` util which is not ideal; moving it from the `selector` the `core` module resolves the issue. Closes gh-5167
This commit is contained in:
parent
c909d6b1ff
commit
024d87195a
14
src/core.js
14
src/core.js
@ -314,6 +314,20 @@ jQuery.extend( {
|
||||
return !rhtmlSuffix.test( namespace || docElem && docElem.nodeName || "HTML" );
|
||||
},
|
||||
|
||||
// Note: an element does not contain itself
|
||||
contains: function( a, b ) {
|
||||
var bup = b && b.parentNode;
|
||||
|
||||
return a === bup || !!( bup && bup.nodeType === 1 && (
|
||||
|
||||
// Support: IE 9 - 11+
|
||||
// IE doesn't have `contains` on SVG.
|
||||
a.contains ?
|
||||
a.contains( bup ) :
|
||||
a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16
|
||||
) );
|
||||
},
|
||||
|
||||
merge: function( first, second ) {
|
||||
var len = +second.length,
|
||||
j = 0,
|
||||
|
@ -1,8 +1,6 @@
|
||||
import jQuery from "../core.js";
|
||||
import documentElement from "../var/documentElement.js";
|
||||
|
||||
import "../selector/contains.js"; // jQuery.contains
|
||||
|
||||
var isAttached = function( elem ) {
|
||||
return jQuery.contains( elem.ownerDocument, elem ) ||
|
||||
elem.getRootNode( composed ) === elem.ownerDocument;
|
||||
|
@ -30,7 +30,6 @@ import documentElement from "./var/documentElement.js";
|
||||
import whitespace from "./var/whitespace.js";
|
||||
|
||||
// The following utils are attached directly to the jQuery object.
|
||||
import "./selector/contains.js";
|
||||
import "./selector/escapeSelector.js";
|
||||
import "./selector/uniqueSort.js";
|
||||
|
||||
|
@ -12,7 +12,6 @@ import isIE from "./var/isIE.js";
|
||||
import support from "./selector/support.js";
|
||||
|
||||
// The following utils are attached directly to the jQuery object.
|
||||
import "./selector/contains.js";
|
||||
import "./selector/escapeSelector.js";
|
||||
import "./selector/uniqueSort.js";
|
||||
|
||||
|
@ -1,15 +0,0 @@
|
||||
import jQuery from "../core.js";
|
||||
|
||||
// Note: an element does not contain itself
|
||||
jQuery.contains = function( a, b ) {
|
||||
var bup = b && b.parentNode;
|
||||
|
||||
return a === bup || !!( bup && bup.nodeType === 1 && (
|
||||
|
||||
// Support: IE 9 - 11+
|
||||
// IE doesn't have `contains` on SVG.
|
||||
a.contains ?
|
||||
a.contains( bup ) :
|
||||
a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16
|
||||
) );
|
||||
};
|
@ -1557,3 +1557,59 @@ QUnit[ includesModule( "deferred" ) ? "test" : "skip" ]( "jQuery.readyException
|
||||
throw new Error( "Error in jQuery ready" );
|
||||
} );
|
||||
} );
|
||||
|
||||
QUnit.test( "jQuery.contains", function( assert ) {
|
||||
assert.expect( 16 );
|
||||
|
||||
var container = document.getElementById( "nonnodes" ),
|
||||
element = container.firstChild,
|
||||
text = element.nextSibling,
|
||||
nonContained = container.nextSibling,
|
||||
detached = document.createElement( "a" );
|
||||
assert.ok( element && element.nodeType === 1, "preliminary: found element" );
|
||||
assert.ok( text && text.nodeType === 3, "preliminary: found text" );
|
||||
assert.ok( nonContained, "preliminary: found non-descendant" );
|
||||
assert.ok( jQuery.contains( container, element ), "child" );
|
||||
assert.ok( jQuery.contains( container.parentNode, element ), "grandchild" );
|
||||
assert.ok( jQuery.contains( container, text ), "text child" );
|
||||
assert.ok( jQuery.contains( container.parentNode, text ), "text grandchild" );
|
||||
assert.ok( !jQuery.contains( container, container ), "self" );
|
||||
assert.ok( !jQuery.contains( element, container ), "parent" );
|
||||
assert.ok( !jQuery.contains( container, nonContained ), "non-descendant" );
|
||||
assert.ok( !jQuery.contains( container, document ), "document" );
|
||||
assert.ok( !jQuery.contains( container, document.documentElement ), "documentElement (negative)" );
|
||||
assert.ok( !jQuery.contains( container, null ), "Passing null does not throw an error" );
|
||||
assert.ok( jQuery.contains( document, document.documentElement ), "documentElement (positive)" );
|
||||
assert.ok( jQuery.contains( document, element ), "document container (positive)" );
|
||||
assert.ok( !jQuery.contains( document, detached ), "document container (negative)" );
|
||||
} );
|
||||
|
||||
QUnit.test( "jQuery.contains in SVG (jQuery trac-10832)", function( assert ) {
|
||||
assert.expect( 4 );
|
||||
|
||||
var svg = jQuery(
|
||||
"<svg xmlns='http://www.w3.org/2000/svg' version='1.1' height='1' width='1'>" +
|
||||
"<g><circle cx='1' cy='1' r='1' /></g>" +
|
||||
"</svg>"
|
||||
).appendTo( "#qunit-fixture" )[ 0 ];
|
||||
|
||||
assert.ok( jQuery.contains( svg, svg.firstChild ), "root child" );
|
||||
assert.ok( jQuery.contains( svg.firstChild, svg.firstChild.firstChild ), "element child" );
|
||||
assert.ok( jQuery.contains( svg, svg.firstChild.firstChild ), "root granchild" );
|
||||
assert.ok( !jQuery.contains( svg.firstChild.firstChild, svg.firstChild ),
|
||||
"parent (negative)" );
|
||||
} );
|
||||
|
||||
QUnit.testUnlessIE( "jQuery.contains within <template/> doesn't throw (gh-5147)", function( assert ) {
|
||||
assert.expect( 1 );
|
||||
|
||||
var template = jQuery( "<template><div><div class='a'></div></div></template>" ),
|
||||
a = jQuery( template[ 0 ].content ).find( ".a" );
|
||||
|
||||
template.appendTo( "#qunit-fixture" );
|
||||
|
||||
jQuery.contains( a[ 0 ].ownerDocument, a[ 0 ] );
|
||||
|
||||
assert.ok( true, "Didn't throw" );
|
||||
} );
|
||||
|
||||
|
@ -1853,61 +1853,6 @@ testIframe(
|
||||
}
|
||||
);
|
||||
|
||||
QUnit.test( "jQuery.contains", function( assert ) {
|
||||
assert.expect( 16 );
|
||||
|
||||
var container = document.getElementById( "nonnodes" ),
|
||||
element = container.firstChild,
|
||||
text = element.nextSibling,
|
||||
nonContained = container.nextSibling,
|
||||
detached = document.createElement( "a" );
|
||||
assert.ok( element && element.nodeType === 1, "preliminary: found element" );
|
||||
assert.ok( text && text.nodeType === 3, "preliminary: found text" );
|
||||
assert.ok( nonContained, "preliminary: found non-descendant" );
|
||||
assert.ok( jQuery.contains( container, element ), "child" );
|
||||
assert.ok( jQuery.contains( container.parentNode, element ), "grandchild" );
|
||||
assert.ok( jQuery.contains( container, text ), "text child" );
|
||||
assert.ok( jQuery.contains( container.parentNode, text ), "text grandchild" );
|
||||
assert.ok( !jQuery.contains( container, container ), "self" );
|
||||
assert.ok( !jQuery.contains( element, container ), "parent" );
|
||||
assert.ok( !jQuery.contains( container, nonContained ), "non-descendant" );
|
||||
assert.ok( !jQuery.contains( container, document ), "document" );
|
||||
assert.ok( !jQuery.contains( container, document.documentElement ), "documentElement (negative)" );
|
||||
assert.ok( !jQuery.contains( container, null ), "Passing null does not throw an error" );
|
||||
assert.ok( jQuery.contains( document, document.documentElement ), "documentElement (positive)" );
|
||||
assert.ok( jQuery.contains( document, element ), "document container (positive)" );
|
||||
assert.ok( !jQuery.contains( document, detached ), "document container (negative)" );
|
||||
} );
|
||||
|
||||
QUnit.test( "jQuery.contains in SVG (jQuery trac-10832)", function( assert ) {
|
||||
assert.expect( 4 );
|
||||
|
||||
var svg = jQuery(
|
||||
"<svg xmlns='http://www.w3.org/2000/svg' version='1.1' height='1' width='1'>" +
|
||||
"<g><circle cx='1' cy='1' r='1' /></g>" +
|
||||
"</svg>"
|
||||
).appendTo( "#qunit-fixture" )[ 0 ];
|
||||
|
||||
assert.ok( jQuery.contains( svg, svg.firstChild ), "root child" );
|
||||
assert.ok( jQuery.contains( svg.firstChild, svg.firstChild.firstChild ), "element child" );
|
||||
assert.ok( jQuery.contains( svg, svg.firstChild.firstChild ), "root granchild" );
|
||||
assert.ok( !jQuery.contains( svg.firstChild.firstChild, svg.firstChild ),
|
||||
"parent (negative)" );
|
||||
} );
|
||||
|
||||
QUnit.testUnlessIE( "jQuery.contains within <template/> doesn't throw (gh-5147)", function( assert ) {
|
||||
assert.expect( 1 );
|
||||
|
||||
var template = jQuery( "<template><div><div class='a'></div></div></template>" ),
|
||||
a = jQuery( template[ 0 ].content ).find( ".a" );
|
||||
|
||||
template.appendTo( "#qunit-fixture" );
|
||||
|
||||
jQuery.contains( a[ 0 ].ownerDocument, a[ 0 ] );
|
||||
|
||||
assert.ok( true, "Didn't throw" );
|
||||
} );
|
||||
|
||||
QUnit.test( "find in document fragments", function( assert ) {
|
||||
assert.expect( 1 );
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user