Javascript 具有非平凡HTML标记的jQuery事件委派?

Javascript 具有非平凡HTML标记的jQuery事件委派?,javascript,jquery,Javascript,Jquery,我有两个DIV,第一个DIV中有一个链接,在其HREF属性()中包含第二个DIV的id 我想在用户单击第一个DIV时设置第二个DIV的动画-第一个DIV上的任意位置。我还想使用事件委派,因为我在一个页面上会有很多这样的“DIV对”(我使用的是本文中的一个JS片段) 如果用户单击DIV本身,它就会工作——只需检查firebug控制台输出。问题是,如果用户单击其中一个跨距或链接本身,它将不再工作 我如何概括单击处理程序来管理DIV中任何内容的单击 以下是JS: $('#a').click(funct

我有两个DIV,第一个DIV中有一个链接,在其HREF属性()中包含第二个DIV的id

我想在用户单击第一个DIV时设置第二个DIV的动画-第一个DIV上的任意位置。我还想使用事件委派,因为我在一个页面上会有很多这样的“DIV对”(我使用的是本文中的一个JS片段)

如果用户单击DIV本身,它就会工作——只需检查firebug控制台输出。问题是,如果用户单击其中一个跨距或链接本身,它将不再工作

我如何概括单击处理程序来管理DIV中任何内容的单击

以下是JS:

$('#a').click(function(e) { 
    var n = $(e.target)[0]; 
    console.log(n); 

    if ( n && (n.nodeName.toUpperCase() == 'DIV') ) { 
        var id = $(n).find('a').attr('hash'); 

        console.log(id); 
        $(id).slideToggle(); 
    } 
    return false; 
}); 

我花了很长时间才写出这个问题,所以我决定把它贴出来,也许有人会建议一个更好的方法

以下是我找到的解决方案():


这是我的解决办法。不确定这是否正是你想要的,但对我来说很有效

$(document).ready(function() {
    $('#a').click(function() {
        var a = $("a", this);
        $(a[0].hash).slideToggle();
    });
});
编辑:在IE7和Fx3中测试


编辑:那样的话

$(function() {
    $("a.tab").click(function() {
        $($(this).attr("hash")).slideToggle();
        return false;
    });
});
类似的方法可能会起作用(将tab类放在任何有div“附加”的对象上)。然而,我不确定,除非我真的看到一个例子。尽管如果您希望在单击跨度时使其工作,您可以将该类附加到跨度,并执行以下操作:

$(function() {
    $("span.tab").click(function() {
        var a = $("a",this);
        $(a.attr("hash")).slideToggle();
    });
});

不确定如果打开另一个div,是否希望关闭打开的div。如果这不能解决您的问题,那么您可以在jsbin上举一个例子,这会有所帮助。

这看起来确实很简单!事实上,现在我有机会对它进行实际测试,它不会起作用,因为我在DIV中有多个链接,这就是事件委派的全部意义。当我看到这个并接受它作为正确答案时,我真的没有想过。所以,基本上在div#a中会有多个链接,但是其中只有一个具有另一个div的id?当你点击div#a中的任意位置时,你想让链接所指的div动画化吗?或者会有多个链接,并且每个链接都要为另一个div设置动画?在第一种情况下,将一个类添加到包含哈希的链接中,例如info,并将$(“a”,this)更改为$(“a.info”,this)Yes,后者:许多link DIV耦合,每个链接都会设置DIV的动画,该DIV的ID位于链接的HREF属性中(这就是为什么我首先使用它来创建链接和DIV之间的连接)。即使我为每个链接添加一个类,这也会获取容器中的所有链接,容器中有多个link-DIV对。
$(function() {
    $("span.tab").click(function() {
        var a = $("a",this);
        $(a.attr("hash")).slideToggle();
    });
});