理解JQuery选择器的问题

时间:2011-02-04 17:20:30

标签: jquery css-selectors

例如,如果我点击添加+ 9次,我将有10个盒子。但之后,只有当A单击最后一个框时,它才会隐藏。 (我希望通过单击该框隐藏特定的框)。顺便说一下(并打开)最后一个盒子后,另一个盒子不会以任何方式隐藏 我的问题是什么?

$(document).ready(function(){
    $("#add").click(function(){
        $(".test:last").clone().insertAfter(this);
    })
    $(".test").click(function(){
        $(this).hide("slow");
    })
})

<div id="add">ADD+</div>
<div class="test" style="border:1px solid black; width:70px; height:25px;">
    box
</div>

4 个答案:

答案 0 :(得分:4)

因为您只是连接文档加载时存在的那个。变化

$(".test").click(function(){
    $(this).hide("slow");
})

$(".test").live('click', function(){
    $(this).hide("slow");
});

click用于将事件连接到已存在的元素。使用live,您可以更具推测性,并说“将此事件与任何已存在的事件挂钩,以后我添加的与此选择器匹配的任何事件。”还有delegate如果您想要live的功能,但对于特定元素的后代,则可能很有用。

详细说明:

答案 1 :(得分:3)

使用.clone(true)代替.clone()来复制事件处理程序。

示例: http://jsfiddle.net/hQ5Qc/


我还要补充一点,你可能想要改变选择器:

$(".test:last")

到此:

$(".test:visible:last")

所以,如果你隐藏最后一个方框,你就不会克隆一个已经隐藏的方框。

示例: http://jsfiddle.net/hQ5Qc/2/

答案 2 :(得分:0)

  1. 你应该花更多的时间来写你的问题来纠正你的拼写和语法。
  2. 以前在很多方面都提出了这个问题。
  3. 查看jQuery APIlivedelegate
  4. clone

答案 3 :(得分:0)

$(document).ready(function(){
    $(".test").click(function(){
         $(this).hide("slow");
    })

    $("#add").click(function(){
         $(".test:visible:last").clone(true).insertAfter(this);
    })
})

每条评论建议添加:visible

相关问题