希望有一個簡單的辦法解決這個。 我想選擇所有具有事件屬性的html元素。例如:onclick,onkeypress等是否有一個最簡單的方法來做到這一點使用Jquery沒有選擇每個屬性分開?如何使用Jquery選擇具有事件屬性的元素?
謝謝
希望有一個簡單的辦法解決這個。 我想選擇所有具有事件屬性的html元素。例如:onclick,onkeypress等是否有一個最簡單的方法來做到這一點使用Jquery沒有選擇每個屬性分開?如何使用Jquery選擇具有事件屬性的元素?
謝謝
我認爲短期回答你的問題是沒有。
不同的HTML標籤支持不同的事件,所以他們應該某處jQuery代碼被硬編碼。例如,通過閱讀jQuery代碼,我找不到任何對onkeypress事件的引用。
所以,我覺得你可以僅僅依靠Has Attribute Selector[attribute]
:
$('[onclick], [onkeypress], [etc]');
你可以解析所有元素並檢查。效率不高,但它應該有效。
檢查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]);
}
}
如果該值不具體,你可以試試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());
});
這是如何回答這個問題的? – gdoron
gdoron是對的。他想知道是否有一種:hasEvent選擇器,而不是列出所有事件。 –
你可以做一個自定義過濾功能,找到與上與開始,像這樣的屬性的元素:
$.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');
});
只有使用標準HTML屬性才能安全使用。 –
@LucaFagioli是的,我只是想添加另一種可能性,以解決OP的問題,我瞭解他的情況下,事件通過標準的HTML屬性相連接。OP會更好地瞭解他的html模板,他會知道我的解決方案對他的具體情況是否有用,我只是在板上添加不同的解決方案:-) – Nelson
這是一個弱檢查。儘管它具有正確的語法(僅在標準HTML屬性的上下文中),但不同的HTML標記僅支持這些事件的一個子集。你還應該添加一個檢查地圖[tag :: [attributes]]。但我相信它開始太耗費CPU了。 –
出人意料的是,答案非給定到目前爲止回答了你的有趣的問題。 – gdoron