【问题标题】:get all elements with onclick in them?获取所有带有 onclick 的元素?
【发布时间】:2010-05-20 22:54:04
【问题描述】:

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

【问题讨论】:

标签: javascript jquery onclick


【解决方案1】:

已编辑以回答更多问题...


我不确定您到底在问什么,但我怀疑您正在寻找一种方法来查看是否有代码附加到元素的 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] );
    }
}

如果您想要一些关于附加到 onclick 事件的实际函数的信息,您需要使用 Firebug 或类似的东西来输出函数并检查它,因为它可能在运行时生成(即函数声明可能不仅仅位于理论上可以轻松访问的页面上)。尝试使用上面提供的代码,而不是

console.log(allElements[i]);

console.log(allElements[i].onclick);

现在,在 firebug 中,您可以将鼠标悬停在它打印的函数上并查看它们的代码。

【讨论】:

  • 好吧,我有一个页面,里面有一堆共享相同类名的 div。这些 div 也附有 onckicks。我想提取每个 onclick 中的数据。我相信上面发布的代码会列出页面上的所有元素......所以,我需要获取具有相同类名的所有元素,然后获取每个 onclick 中的参数
  • 帖子已编辑以提供更多信息。一定要阅读 bobince 的回答,并且他会做出一些很好的观察。
【解决方案2】:

@Josh the Goods 的回答对我不起作用,我不得不稍微修改一下。

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);
        }
    }
}

【讨论】:

    【解决方案3】:

    如果您使用 jQuery >= 1.4,您可以通过编写 oneliner 来获取所有具有 onclick 属性的元素的 Array:

    $('body *').toArray().filter(function(el) { return $(el).attr('onclick') });
    

    【讨论】:

      【解决方案4】:

      我需要获取...每个 onclick 中的参数

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

      var onclickstr= allElements[i].getAttributeNode('onclick').value;
      

      在 Josh 的代码中(这是一个稍微迂回的方法,IE 需要)。

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

      试图从 JavaScript 代码字符串中提取值是一种丑陋且不可靠的技巧,除非真的别无选择,否则您不应该使用这种方法。如果页面是您自己生成的,那么您应该使用不显眼的脚本技术。完全省略像 onclick 这样的内联事件处理程序属性(今天它们被认为是不好的做法)并从 JavaScript 本身附加处理程序,使用存储在更易于访问的位置的参数,如类名和其他必要的“备用”属性。

      【讨论】:

        【解决方案5】:

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

        var getEventHandlers = function(nodes, eventType) {
            var handlers = [], h;
        
            for ( var i=0, l=nodes.length; i<l; i++ ) {
                h = nodes[i].getAttribute(eventType);
                if ( typeof h === "function" ) {
                    handlers.push(h);
                }
            }
        
            return handlers;
        };
        

        用途:

        console.log(getEventHandlers($("*"), "onclick"));
        console.log(getEventHandlers($(".some-class"), "onclick"));
        

        【讨论】:

          【解决方案6】:

          对于一个简洁的 jquery 选择器,您可以使用$('[onclick]'),但这只会获取带有 onclick attribute 集的元素。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2016-05-05
            • 2014-09-07
            • 2016-11-15
            • 2011-06-22
            • 2019-07-10
            • 1970-01-01
            相关资源
            最近更新 更多