2016-08-03 14 views
0

パラメータJQueryオブジェクトから期待される関数があります。 DOM内にJQueryオブジェクトが存在するかどうかを調べる必要があります($('<div></div>')の場合)。DOM内にJQueryオブジェクトが存在するかどうかを確認

重複がないかチェックし、いくつかの回答が見つかりました(link1link2link3)。いくつかの専門家が光の魔女を輝かせることができるのは、(最速の)最善の方法です。

オプションは次のとおりです。

$.contains //not working 
$a.find 
$a.parent() 
$a.closes() 
document.contains() 
$a[0].isConnected 

スニペット:

var a = $("#test"); //length 1 
 
var b = $('<div></div>'); //length 1 
 

 
console.log("contains: ", $.contains(document, a), $.contains(document, b)); //false, false 
 
console.log("find: ", !!$(document).find(a).length, !!$(document).find(b).length); // true, false 
 
console.log("parent: ", !!a.parent().length, !!b.parent().length); // true, false 
 
console.log("closest: ", !!a.closest('body').length, !!b.closest('body').length); //true, false 
 
console.log("document.contains: ", document.contains(a[0]), document.contains(b[0])); //true, false 
 
console.log("isConnected: ", a[0].isConnected, b[0].isConnected); //true, false
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<!DOCTYPE html> 
 
<html> 
 
<head> 
 
</head> 
 
<body> 
 
    <div id="test"></div> 
 
</body> 
 
</html>

ありがとうございました。

答えて

1

パフォーマンスが本当に大きな懸念事項である場合は、ネイティブメソッドが一般的な方法です。

document.contains($myJQueryEl[0]) 

this answer and its commentに従って約4倍、次の最速のjQueryの操作、$elem.closest('body')よりも性能が優れています。

ただし、非ドキュメント要素のパフォーマンスを実際に探している場合は、Shadow DOMが最適です。

+0

こんにちは、document.containsはIE 11では動作しません – Makla

+1

@Maklaあなたの要件の一つとして、ブラウザの互換性については言及しませんでした。そうであれば、上記の '$ elem.closest( 'body')'は次の一番速い選択肢です。 :) – Harangue

1

最高のパフォーマンスを望む場合は、jQueryを使用しないでください。あなたはisConnectedを試すことができます。

context objectconnectedあり、それ以外の場合はfalse場合isConnected属性のゲッターは、trueを返さなければなりません。

shadow-including rootdocumentの場合、elementが接続されます。

$element[0].isConnected; // jQuery 
element.isConnected; // Native JS 
+0

こんにちは、明らかにisConnectedはFirefox 48.0やIE 11では動作しません。 – Makla

+0

@Makla確かに新しいことと思われます。 Firefox 49でも動作します。 – Oriol

関連する問題