]> source.dussan.org Git - jquery.git/commitdiff
Core:Selector: Move jQuery.contains from the selector to the core module
authorMichał Gołębiowski-Owczarek <m.goleb@gmail.com>
Mon, 12 Dec 2022 21:27:59 +0000 (22:27 +0100)
committerGitHub <noreply@github.com>
Mon, 12 Dec 2022 21:27:59 +0000 (22:27 +0100)
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

src/core.js
src/core/isAttached.js
src/selector-native.js
src/selector.js
src/selector/contains.js [deleted file]
test/unit/core.js
test/unit/selector.js

index 4f5731ae1b90656f1655449deb0b4fdd4b84d4ca..16cd9a7c7d62126eb311ed62a425c3cba0b16ba5 100644 (file)
@@ -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,
index 9c57a4741f71ada61f96fa2efdf02acfabadbf7e..72c7bbda4035d463f19495d3dbdc948cdf7b3613 100644 (file)
@@ -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;
index 0e2e48d8145c995bdb61187ae7554dc92e340aa6..7ca500515a9c443b30484e42fec5d5b565e83613 100644 (file)
@@ -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";
 
index a69e16556077dce78e4c96c0c3c9ccac95c2824f..e6ec6a326d6c17a42dbd4df92982ad1ef09d10cc 100644 (file)
@@ -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";
 
diff --git a/src/selector/contains.js b/src/selector/contains.js
deleted file mode 100644 (file)
index 137b543..0000000
+++ /dev/null
@@ -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
-       ) );
-};
index b4bd5838cc7fd6726a183f6f50e6b310fbdb998d..49b7aa607d9da0d09d80b3582580beb57979f5bf 100644 (file)
@@ -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" );
+} );
+
index 720d2ddf5e775a7e6328ac3ddb968026144b2d08..0057fe57ab89d0871d6cd2e192735514d3233b84 100644 (file)
@@ -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 );