0

要素のクラスを取得しようとしていますが、現在の要素クラスが空の場合、その親クラスが表示されます。

何もしないが親クラスを表示しない場合、現在の要素にクラスがあるかどうかを確認したいだけです

$('*').click(function(){
    var class_of_el = $(this).attr('class').replace('test', '').replace('test2', '');
    alert(class_of_el);
});

ここにフィドルがあります:http://jsfiddle.net/howtoplease/cpENU/

4

5 に答える 5

3

問題は、イベントが伝播していることです。

これを試して:

$('*').click(function(evt){
    evt.stopPropagation();
    var class_of_el = $(this).attr('class').replace('test', '').replace('test2', '');
    alert(class_of_el);
});

クラスのない要素をクリックしても何も起こりませんが、クラスのある要素をクリックするとalert編集されます。 jsフィドル

于 2013-07-23T04:34:00.790 に答える
1

clickドキュメント内のすべての要素にイベント ハンドラーを登録し、それらからのイベントの伝播を防止することは、悪い考えである可能性があります。

$(document).on('click', '*', function(e){
    if(e.target == this){
        console.log($(this).attr('class'))
    }
})

デモ:フィドル

于 2013-07-23T04:39:29.320 に答える
1

jQuery('*')はすべての要素を選択します。そのため、親要素のクラス名も取得しています。

クラスで null チェックを追加すると、要素ごとに値が返されることがわかります。すなわち

$('*').click(function(){
    var class_of_el = $(this).attr('class') != undefined? $(this).attr('class').replace('test', '').replace('test2', '') : 'empty';
    alert(class_of_el);
});

これがデモです。

于 2013-07-23T04:38:31.060 に答える
1

winterblood が言ったように、ページ上のすべての要素を選択したため、イベントは親要素に伝播しています。ただし、目的が特定のクラスをチェックすることである場合は、属性 を解析する代わりに
使用できることも付け加えておきます。hasClassclass

$('*').click(function(evt) {
    evt.stopPropagation();
    var isTest = $(this).hasClass('test');
});
于 2013-07-23T04:41:57.730 に答える
1

外側の要素にバブルするイベントを停止する必要があります-

あなたはこのようなことをすることができます

$('*').click(function(event){
    event.stopPropagation();  // This will stop bubbling of event
    var class_of_el = $(this).attr('class').replace('test', '').replace('test2', '');
    alert(class_of_el);
});

http://jsfiddle.net/cpENU/6/

于 2013-07-23T04:43:38.883 に答える