2013-07-23 97 views
0

我試圖讓元素的類,但它表明它的父類,如果當前元素類是空的。jQuery的 - ATTR(「類」)獲得父類

我只是想檢查,如果目前的元素有類,如果沒有做什麼,但不表明父類

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

這裏是小提琴:http://jsfiddle.net/howtoplease/cpENU/

+0

'*'不是元素......但整個DOC – coolguy

+0

我可以用'e.stopPropagation();'在這裏 – user007

+0

你必須使用這裏'target' – coolguy

回答

3

的問題是,該事件被傳播。點擊一個元素時無類

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

現在,什麼都不會發生,但如果你點擊一個類的元素,它將alert編輯:

試試這個。 jsFiddle

1

jQuery('*')選擇所有元素,這就是爲什麼你得到父元素的類名也。

當您添加帶班空檢查,你可以看到,它的每個元素返回值。即

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

這裏是demo.

1

這可能是一個壞主意,註冊click事件處理程序的文檔中的所有元素,並防止事件傳播從他們身上。

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

演示:Fiddle

1

至於說通過winterblood,該事件是因爲你選擇頁面上的每一個元素progating父元素。
不過,我還想補充一點,如果你的目標是要檢查特定類,您可以使用hasClass代替解析class屬性。

$('*').click(function(evt) { 
    evt.stopPropagation(); 
    var isTest = $(this).hasClass('test'); 
}); 
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/

+0

這與我上面的回答有什麼不同? –

+0

我沒有檢查你的答案 –