1

jQueryを使用するテキストノードを含む、コンテナのすべてのノードに「マウスアップ」イベントをアタッチしたいと思います。それ、どうやったら出来るの?

アップデート:

このようなHTMLフラグメントがある場合:

<p>Some text node <strong>strong text</strong> another text node.</p>

現在、$( "p *")は、イベントをに適用しますが、<p>別々<strong>に内の2つのテキストノードには適用しません<p>。ソースを変更してクラスを追加することはできません。

4

5 に答える 5

3

bobinceは、テキストノードにイベントハンドラーを設定できないということは正しいです。あなたは次のようなものが欲しいようです

<p><span>Some text node</span> <strong>strong text</strong><span> another text node.</span></p>

イベントはスパンタグに添付されます。ただし、ソースを変更できない場合は機能しません。

于 2009-12-10T13:47:32.937 に答える
2

Tatuの答えは機能するはずですが(.clickの代わりに.mouseupを使用することを除いて)、実際にすべてのノードでイベントハンドラーが必要ですか?を使用してバインドする場合

$('#container').mouseup(function(event){//code})

イベントバブリングモデルは、#container内の任意の要素でmouseupイベントが発生するたびに同じ関数を呼び出し、実際にイベントをトリガーしたDOMノードはevent.targetプロパティに含まれます。ほとんどの場合、これははるかに効率的です。

于 2009-12-10T13:19:36.320 に答える
1

Textノードにイベントハンドラーを設定することはできません。テキストノードは、ノードのようにEventTargetインターフェイスを実装しません。ノードとオブジェクトは、実装します。ElementDocumentwindow

あなたもそうする必要はありません。mouseup親要素に1つのハンドラーを設定するとmouseup、そのすべての子コンテンツのイベントが取得されます。これは、mouseupイベントがその祖先を介して「バブル」するためです。

于 2009-12-10T13:34:13.537 に答える
1
$('#container *').mouseup(function() { ... });

これにより、mouseupイベントハンドラーが#container内のすべてのノードにバインドされます。

編集

クリック->マウスアップをより明確に変更しました。

于 2009-12-10T13:13:21.057 に答える
0

最も簡単なのは、すべてのノードにクラスを追加することだと思います。jqueryセレクターは次のように単純になります:$('。yourClassName')。dostuff()

于 2009-12-10T13:12:05.397 に答える