define( [

"../core",
"../var/documentElement",
"../selector" // jQuery.contains

], function( jQuery, documentElement ) {

"use strict";

var isAttached = function( elem ) {
                return jQuery.contains( elem.ownerDocument, elem );
        },
        composed = { composed: true };

// Support: IE 9 - 11+, Edge 12 - 18+, iOS 10.0 - 10.2 only
// Check attachment across shadow DOM boundaries when possible (gh-3504)
// Support: iOS 10.0-10.2 only
// Early iOS 10 versions support `attachShadow` but not `getRootNode`,
// leading to errors. We need to check for `getRootNode`.
if ( documentElement.getRootNode ) {
        isAttached = function( elem ) {
                return jQuery.contains( elem.ownerDocument, elem ) ||
                        elem.getRootNode( composed ) === elem.ownerDocument;
        };
}

return isAttached;

} );