2

我想我已经花了太多时间研究这个功能,只是被困在试图找出一种干净的方法来做到这一点。

这是一个 jQuery 函数,可以将点击事件添加到任何div具有clickCSS 类的事件中。单击它时,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/

4

4 回答 4

6

根据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元素不会减慢您的事件处理速度。

于 2010-04-15T15:44:16.400 回答
5

使用 jQuery 1.7+ 优化委托

$('#div-click-parent').on('click', 'div.click', function () {
   window.location.href = $(this).find('a').attr('href');
});
于 2012-07-12T09:43:25.940 回答
2

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

$(document).ready(function() {
   $('.click').click(function() {
        window.location = $(this).children('a:first').attr('href');
        return false;
    });
});
于 2010-04-15T15:33:37.857 回答
0

我可能会做类似的事情;

$('.click').click(function(e){
  window.location.href = $(this).find('a').attr('href');
});
于 2010-04-15T15:33:45.037 回答