Javascript 将单击事件添加到Div并转到找到的第一个链接

Javascript 将单击事件添加到Div并转到找到的第一个链接,javascript,jquery,jquery-selectors,jquery-events,Javascript,Jquery,Jquery Selectors,Jquery Events,我想我已经花了太多时间研究这个函数了,只是一直在试图找到一个干净的方法来实现它 这是一个jQuery函数,它向任何具有clickCSS类的div添加一个click事件。单击div.click时,它会将用户重定向到其中找到的第一个链接 function clickabledivs() { $('.click').each( function (intIndex) { $(this).bind("click", function(){

我想我已经花了太多时间研究这个函数了,只是一直在试图找到一个干净的方法来实现它

这是一个jQuery函数,它向任何具有
click
CSS类的
div
添加一个click事件。单击
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基准测试参考:
与其在加载时绑定所有单击,为什么不在单击时绑定它们?应该更为理想

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

我可能会这样做

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

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

$('#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
元素不会减慢事件处理速度。

使用jQuery 1.7优化委派+

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

+1因为你是第一个不认为是直系子女的人!我很确定他指的是
'a'
而不是
a
。你在哪里看到了关于加载时绑定点击的内容?哇,谢谢你的快速回答。功能肯定可以优化得更多。我会坚持你建议的熊吃的那个。所有div点击只需一个事件。非常感谢。只是一个快速的调整,“如果($target.is('div.click')”需要一个额外的)结尾。再次感谢!感谢这个简单的解决方案,我们试图使div基于h3 title a href可点击,这是可行的!