2017-12-07 16 views
4

私の前提条件は、1つのDOMだけで動作し、getElementByIdまたはquerySelectorまたはeventのようなDOM APIを使用することです。この場合、次の条件を使用することは安全ですか。DOMノードを "==="と比較するのは安全ですか?

if (document.body === event.currentTarget) { } 

イベントが文書の本文にバブリングされているかどうかを確認しますか?

これはクローンオブジェクトでは機能しません。しかし、私は自分でオブジェクトをクローンしません。 DOM APIはどこでもオブジェクトをクローンしますか?

答えて

4

はい、これは安全です。 DOMオブジェクトはブラウザに置き換えられず、かなり安定したオブジェクトです。

自分自身が頻繁にWeakMapsを使用して、問題なくデータに要素をバインドします(example)。

0

すでにプロジェクトにjQを使用している場合には、これは既に与えられているので直接の回答ではありません。これは、書くのが短く、使用する方法がかなり強力であるため、誰かがこのことを読むと役に立ちます。

jQueryでは、1.6以降、is()を使用することができます。

<div id="parent"> 
    <p>drek</p> 
    <p id="target">kmek</p> 
    <div>mrr</div> 
</div> 

あなたが別の結果を選択JQ比較することができます:

$("#target").is($("#target")); 

あなたはDOMオブジェクトにそれを比較することができます はあなたが持っているとしましょう

$("#target").is(document.getElementById("target")); 

あなたはコールバックでそれを使用することができますそれは新しいjqオブジェクトを作成しないためです:

$("#target").click(function(event) { 
    var target = $(event.target); 
    if (target.is("li")) { 
    target.css("background-color", "red"); 
    } 
}); 

あなたがセットにそれを使用することができます(本当それはセットに少なくとも一つの要素と一致した場合):

$('#parent').children().is("p"); 

おそらく他の賢いのカップルが可能使用しています API description

関連する問題