【问题标题】:Add click event to Div and go to first link found将点击事件添加到 Div 并转到找到的第一个链接
【发布时间】:2011-02-08 10:53:24
【问题描述】:

我想我已经花了太多时间研究这个功能,只是在试图找出一个干净的好方法来完成它。

这是一个 jQuery 函数,可将点击事件添加到任何具有 click CSS 类的 div。当点击div.click 时,它会将用户重定向到其中找到的第一个链接。

function clickabledivs() {
    $('.click').each(
        function (intIndex) {
            $(this).bind("click", function(){
                window.location = $( "#"+$(this).attr('id')+" a:first-child" ).attr('href');
            });
        }
    );
}

虽然我很确定有更好的方法来完成它,但代码很简单,特别是我正在使用的选择器:$( "#"+$(this).attr('id')+" a:first-child" )。一切看起来漫长而缓慢。有任何想法吗?

如果您需要更多详细信息,请告诉我。

PS:我在这里从 Project2k.de 中找到了一些非常好的 jQuery 基准测试参考: http://blog.projekt2k.de/2010/01/benchmarking-jquery-1-4/

【问题讨论】:

    标签: javascript jquery jquery-selectors jquery-events


    【解决方案1】:

    根据您拥有的这些div.click 元素的数量,您可能希望使用事件委托来处理这些点击。这意味着对所有具有 click 类的 div 使用单个事件处理程序。然后,在该事件处理程序中,您的回调将根据事件的来源div.click 执行。像这样:

    $('#div-click-parent').click(function (event)
    {
        var $target = $(event.target); // the element that fired the original click event
        if ($target.is('div.click'))
        {
            window.location.href = $target.find('a').attr('href');
        }
    });
    

    更少的事件处理程序意味着更好的扩展 - 更多的 div.click 元素不会减慢您的事件处理速度。

    【讨论】:

    • 哇,感谢您的快速回答。该功能肯定可以进一步优化。我会坚持熊会吃你建议的那个。所有 div 点击只需一个事件。谢谢!!
    • 只是一个快速的调整,"if ($target.is('div.click')" 需要一个额外的 ) 在最后。再次感谢!
    • 感谢这个简单的解决方案,试图使 div 基于 h3 标题 a href 可点击,这很有效!
    【解决方案2】:

    使用 jQuery 1.7+ 优化委托

    $('#div-click-parent').on('click', 'div.click', function () {
       window.location.href = $(this).find('a').attr('href');
    });
    

    【讨论】:

      【解决方案3】:

      与其在加载时绑定所有点击,不如在点击时绑定它们?应该更优化。

      $(document).ready(function() {
         $('.click').click(function() {
              window.location = $(this).children('a:first').attr('href');
              return false;
          });
      });
      

      【讨论】:

      • 您在哪里看到有关绑定加载点击的任何信息?
      【解决方案4】:

      我可能会做类似的事情;

      $('.click').click(function(e){
        window.location.href = $(this).find('a').attr('href');
      });
      

      【讨论】:

      • +1 因为你是第一个不认为它是直系子女的人!
      • 我很确定他的意思是 'a' 而不是 a
      猜你喜欢
      • 2011-08-02
      • 1970-01-01
      • 2013-08-04
      • 1970-01-01
      • 1970-01-01
      • 2013-02-11
      • 2011-07-31
      • 1970-01-01
      相关资源
      最近更新 更多