希望有一个简单的解决方法。 我想选择所有带有事件属性的html元素。例如:onclick,onkeypress等。有没有最简单的方法使用Jquery而不是单独选择每个属性?
由于
答案 0 :(得分:4)
我相信你问题的简短回答是 no 。
不同的HTML标记支持不同的事件,因此它们应该在jQuery代码中的某处硬编码。通过jQuery代码阅读,我找不到任何对onkeypress事件的引用,例如。
所以,我认为你可以依靠Has Attribute Selector [attribute]
:
$('[onclick], [onkeypress], [etc]');
答案 1 :(得分: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());
});
答案 2 :(得分:1)
您可以制作自定义过滤器功能,以查找属性以 on 开头的元素,如下所示:
$.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');
});
答案 3 :(得分: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] );
}
}