Javascript 在所有元素中添加onclick?

Javascript 在所有元素中添加onclick?,javascript,jquery,onclick,Javascript,Jquery,Onclick,我正在寻找一种方法,以列出页面上有onclick事件的所有元素。编辑以回答进一步的问题 我不确定您到底在问什么,但我怀疑您正在寻找一种方法来查看是否有代码附加到元素的onclick事件?如果是,请尝试以下方法: var allElements = document.getElementsByTagName('*'); for ( var i = 0; i<allElements.length; i++ ) { if ( allElements[i].className !== '

我正在寻找一种方法,以列出页面上有
onclick
事件的所有元素。

编辑以回答进一步的问题


我不确定您到底在问什么,但我怀疑您正在寻找一种方法来查看是否有代码附加到元素的onclick事件?如果是,请尝试以下方法:

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] );
    }
}
var-allegements=document.getElementsByTagName('*');

对于(var i=0;i如果使用jQuery>=1.4,则可以通过编写oneliner来获得具有onclick属性的所有元素的数组:

$('body *').toArray().filter(function(el) { return $(el).attr('onclick') });
我需要得到每个onclick中的参数

您可以使用以下命令读取
onclick
属性的字符串值:

var onclickstr= allElements[i].getAttributeNode('onclick').value;
在Josh的代码中(这是一个稍微迂回的方法,IE需要)

当然,它只适用于从内联事件处理程序属性附加的事件处理程序,而不是从JavaScript分配给
onclick
属性,或通过
addEventListener
attachEvent
添加的


试图从JavaScript代码字符串中提取值是一种丑陋且不可靠的黑客行为,除非真的没有其他选择,否则你不应该求助于这种行为。如果页面是你自己生成的,你应该改用不引人注目的脚本技术。完全省略内联事件处理程序属性,如
onclick
(今天,它们被认为是不好的做法)并从JavaScript本身附加处理程序,在必要时使用存储在更容易访问的地方的参数,如类名和其他“备用”属性。

如果使用传统/老派的事件处理程序附加方法,这相当容易(以下代码未经测试)


对于简洁的jquery选择器,您可以使用
$(“[onclick]”)
,但是这将只获取具有onclick属性集的元素。

来自@Josh的答案货物对我不起作用,我必须稍微修改它

var allElements = document.getElementsByTagName('*');
for (var i = 0; i < allElements.length; i++) {
    if ($._data(allElements[i])['events'] != undefined 
        && $._data(allElements[i])['events']['click'] != undefined) {
        console.log(allElements[i]);
        for (var ii = 0; ii < $._data(allElements[i])['events']['click'].length; ii++) {
            console.log($._data(allElements[i])['events']['click'][ii].handler);
        }
    }
}
var-allegements=document.getElementsByTagName('*');
对于(var i=0;i
Firequery将所有绑定到html元素的内容映射到地图上,我不知道它是如何工作的,但是如果没有人知道,你可以尝试检查源代码……我有一个页面,其中有一组div共享相同的类名。这些div还附加了onclick。我想提取每个onclick中的数据。我相信上面发布的代码uld列出页面上的所有元素…因此,我需要获取具有相同类名的所有元素,然后获取每个onclickPost中编辑的参数,以提供更多信息。请务必阅读bobince的答案,以及他做出的一些良好观察。
console.log(getEventHandlers($("*"), "onclick"));
console.log(getEventHandlers($(".some-class"), "onclick"));
var allElements = document.getElementsByTagName('*');
for (var i = 0; i < allElements.length; i++) {
    if ($._data(allElements[i])['events'] != undefined 
        && $._data(allElements[i])['events']['click'] != undefined) {
        console.log(allElements[i]);
        for (var ii = 0; ii < $._data(allElements[i])['events']['click'].length; ii++) {
            console.log($._data(allElements[i])['events']['click'][ii].handler);
        }
    }
}