如何使用Jquery选择具有事件属性的元素?

时间:2012-10-21 15:48:11

标签: jquery events

希望有一个简单的解决方法。 我想选择所有带有事件属性的html元素。例如:onclick,onkeypress等。有没有最简单的方法使用Jquery而不是单独选择每个属性?

由于

4 个答案:

答案 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] );
    }
}