2012-01-16 13 views
0
<div id="home"> 
    <div id="second"></div> 
</div> 

#home { 
    width: 100px; 
    height: 100px; 
    background-color: red; 
} 

#second { 
    width: 20px; 
    height: 20px; 
    background-color: green; 
} 

$(window).click(function(e) { 
    if(e.target.id == 'home'){ 
     alert('This is div home!'); 
    } 

}); 

ここで緑のdivをクリックすると、これは機能しませんが、このdivはdivの赤です。 自動的にすべての子div idをホームに追加できますか?このdivに100人の子供がいる場合、100を追加する必要がありますか?機能の子供たちe?

+0

'$( '#home').on( 'click'、function(){...});' –

答えて

3

あなたがターゲット要素が#homeのdiv内にあるかどうかを確認したいと思う:

$(document).click(function(e) 
{ 
    if(e.target.id == 'home' || $(e.target).closest('#home').length) 
    { 
     alert('This is div home!'); 
    } 
}); 

ここでフィドルです:http://jsfiddle.net/6sY49/

+0

+1また、 'e.target.parentNode.id = '$(e.target).parent( '#home')。length'の代わりに' home'を使います。 IMO簡単で読みやすく、間違いなく高速です。 – Paulpro

+0

@ user1 - それは、すべての祖先ではなく親ノードのみをチェックします。私は自分のコードで '親 'を' nearest'に置き換えました。 –

+0

私はそれが子どもではなく、子孫であると言い、彼が望んでいたものだと信じています。しかし、彼はすべての子孫も望んでいる可能性があります。ちょうどあなたのor節の左半分は現在の要素を含むので、今は不要です。近所と親の相違点はこちら:http://api.jquery.com/closest/ – Paulpro

2

e.targetは常に最も深くネストされた要素になります。

すべての祖先をテストする必要がある場合は、.parentNodeを使用して祖先をループします。

$(window).click(function(e) { 
    var el = e.target; 
    while(el.id !== 'home') { 
     el = el.parentNode; 
    } 

    if(el) { 
     alert('This is div home!'); 
    } 
}); 

しかし、あなたは文書全体のイベントの委任をやろうとしているように思えます。 jQueryのは、中に組み込まれて、この能力を持ってい

$(document).on('click','#home',function() { 
    alert('This is div home!'); 
}); 

それとも前に、jQueryの1.7:。

$(document).delegate('#home','click',function() { 
    alert('This is div home!'); 
}); 
+0

私は彼が子供だけを望んだと思う、子孫ではない。しかし私は間違っている可能性があります。 – Paulpro

+0

@ user1:ええ、それは(私のために)質問を理解するのは難しいです。しかし、 'e.target'は子要素を持たないので、私はOPが' home' idを持つものに到達しようとしていると仮定しましたが、私は確信していません。 –

+1

えええええええええええええええええええええええええええええええええええええええええば、 – Paulpro

0

おそらくあなただけの、これは&をbublingイベントを使用します

$('#home').click(function(e) { 
    alert('This is div home'); 
}); 

を使用したいと思いますはるかに効率的になる!

+0

ですが、これは全ての子孫にも適用されます! – Skyrim

関連する問題