如何在Jquery中选择html元素的特定实例?

时间:2014-07-09 22:56:49

标签: javascript jquery html ruby-on-rails

我有一个待办事项列表应用程序,允许用户创建待办事项。现在我正在使用jquery构建功能,允许用户删除任务。

问题是,当我点击一个todo上的删除按钮时,应用程序要求我确认删除每个列表项。当我点击“取消删除”时,它取消所有这些。换句话说,我正在接收所有HTML元素的重复行为。

我相信这是因为所有todo项都是从同一个html.erb模板生成的,而在模板中我给每个元素提供了ID,所以我可以引用它,但因为每个ID都是相同的,我无法区分包含具有相同ID的元素的不同待办事项。 如何在Jquery中选择html元素的特定实例?

完整的JS代码/ HTML输出: http://jsfiddle.net/LvKED/

Rails html.erb代码:

<%= form_for task do |form| %>
  <li>
<% if !task.completed %>
    <p> <%= task.title%></p>
    <p>&ndash; <%=task.body %></p>
     <%= form.check_box :completed, class: "completed_checkbox" %>
     <%= button_to "Delete post",{}, class:"delete_button" %>
     <%= link_to "Confirm deletion",{}, class: "confirm_links", id: "confirm_delete" %>
     <%= link_to "Cancel",{}, class: "confirm_links cancel_delete" %>
     </li>
   <% end %>
<% end %>

3 个答案:

答案 0 :(得分:2)

在事件处理程序中,您可以通过以下代码行引用该特定项:

 var targetElement = $(event.target).closest('li');

答案 1 :(得分:2)

Ishita的回答似乎是正确的,但我还没有评论他的答案的声誉。我认为你必须将“event.target”包装在$()中,所以它将是:

var targetElement = $(event.target).closest('li');

希望有所帮助。

答案 2 :(得分:0)

以下是您可以操作按钮和链接的方法:

$("#task").on("click",".delete_button",function(){
    $(this).hide();
    $(this.form).next('.confirm_links').show()
    .next('.confirm_links').show();
    return false;
});

$("#task").on("click",".cancel_delete",function(){
    $(this).hide()
    .prev(".confirm_links").hide()
    .prev('form').find(".delete_button").show();
    return false;
});

按钮/链接演示:http://jsfiddle.net/fiddleyetu/LvKED/5/

该演示只展示了一种定位可能共享同一选择器的元素中的一个元素的方法。您可以使用的其他有用的jQuery功能是:

jQuery.closest()
jQuery.nextUntil()
jQuery.prevUntil()

找到最适合你的那个。