2012-10-21 141 views
9

希望有一個簡單的辦法解決這個。 我想選擇所有具有事件屬性的html元素。例如:onclick,onkeypress等是否有一個最簡單的方法來做到這一點使用Jquery沒有選擇每個屬性分開?如何使用Jquery選擇具有事件屬性的元素?

謝謝

+0

出人意料的是,答案非給定到目前爲止回答了你的有趣的問題。 – gdoron

回答

4

我認爲短期回答你的問題是沒有

不同的HTML標籤支持不同的事件,所以他們應該某處jQuery代碼被硬編碼。例如,通過閱讀jQuery代碼,我找不到任何對onkeypress事件的引用。

所以,我覺得你可以僅僅依靠Has Attribute Selector[attribute]

$('[onclick], [onkeypress], [etc]'); 
0

你可以解析所有元素並檢查。效率不高,但它應該有效。

檢查get all elements with onclick in them?

var allElements = document.getElementsByTagName('*'); 
for (var i = 0; i<allElements.length; i++) { 
    if (allElements[i].className !== 'theClassNameYoureLookingFor') { 
     continue; 
    } 
    if (typeof allElements[i].onclick === 'function') { 
     // do something with the element here 
     console.log(allElements[i]); 
    } 
} 
1

如果該值不具體,你可以試試this approach

下面打印「嘿,你的人」,基於$([attr1],[attr2],...,[attrN])選擇演示:

<div class="container"> 
    <div>no id</div> 
    <div id="a">hey</div> 
    <span name="b">you</span> 
    <p id="c">guys</p> 
</div>​ 

$('[id],[name]').each(function(){ 
    console.log($(this).text()); 
});​ 

此基礎上建設,簡單的包裝可以寫成:這樣的插件

$.fn.hasAttrib = function() { 
    var attributes = []; 
    $.each(arguments, function(index, value){ 
     attributes.push('[' + value + ']'); 
    }); 
    return $(this).find(attributes.join()); 
}; 

用法在下面的語句還打印「嘿,你的人」

$('.container').hasAttrib('id','name').each(function(){ 
    console.log($(this).text()); 
}); 
+0

這是如何回答這個問題的? – gdoron

+0

gdoron是對的。他想知道是否有一種:hasEvent選擇器,而不是列出所有事件。 –

1

你可以做一個自定義過濾功能,找到與上與開始,像這樣的屬性的元素:

$.fn.filterOn = function() { 
    this.each(function(ind,el) { 
     var attrs = el.attributes; 
     for (var i = 0; i < attrs.length; i++) { 
      if (attrs[i].nodeName.indexOf('on') === 0) return true;  
     } 
     return false; 
    }); 
}; 

,並用它喜歡:

//elems will contain all input fields with an attribute starting with 'on' 
elems = $(':input').filterOn(); 

這會給你在對開始屬性頁面的所有元素(使用*選擇時的表現要小心):

$("*").filterOn().each(function() { 
    console.log('Element '+this.tagName + ' has an on... attribute'); 
}); 
+0

只有使用標準HTML屬性才能安全使用。 –

+0

@LucaFagioli是的,我只是想添加另一種可能性,以解決OP的問題,我瞭解他的情況下,事件通過標準的HTML屬性相連接。OP會更好地瞭解他的html模板,他會知道我的解決方案對他的具體情況是否有用,我只是在板上添加不同的解決方案:-) – Nelson

+0

這是一個弱檢查。儘管它具有正確的語法(僅在標準HTML屬性的上下文中),但不同的HTML標記僅支持這些事件的一個子集。你還應該添加一個檢查地圖[tag :: [attributes]]。但我相信它開始太耗費CPU了。 –

相關問題