9

多くの人が、イベントを割り当てる前に DOM 要素が存在するかどうかを確認しているのを目にします。たとえば (coffeescript):

$ -> 
    if( $("#progressbar").length > 0 ) 
        $("#progressbar").progressbar( value: 0 )

これは必要ですか?とにかくイベントを追加した場合、要素が存在するかどうかに関係なく、パフォーマンスに影響はありますか?

4

1 に答える 1

16

jQuery のすべてのメソッド呼び出しは.each関数にラップされているため、要素が存在するかどうかを確認する必要は通常ありません。セットが空の場合、呼び出された関数の反復は行われず、暗黙のうちに失敗します。$('#progressbar').progressbar()与えられた例はその良い例です。直接呼び出すだけで害やパフォーマンスの低下はありません。

そうしたい場合は、DOM を操作している、または要素の存在に応じてコストのかかる操作を行っているなどの理由で、特に複雑なセレクターの場合は、必ず呼び出しをキャッシュしてください。

specialThings = $('section .special')

if specialThings.length > 0
    doStuffWith specialThings

あるいは、coffeescript の変数安全性を利用する:

if (specialThings = $ 'section .special').length
    doStuffWith specialThings
于 2012-06-11T09:22:49.290 に答える