如何切换 post 和 link 的评论

How to toggle comments of a post with a link

我想像 Facebook 一样使用简单的 link 来切换(与 Facebook 显示和隐藏不同)post 的评论。但是,作为我的应用程序中通过迭代获得的 post 列表,每个 post 显然可以:

  1. 将评论包含在 div 中,与所有其他 post 的评论共享相同的 idclass

  2. 将注释包含在 div 元素中,并使用(例如)idid 生成唯一的 idclass 58=]

在第一种情况下,我无法使用 link 及其 idclass 来切换 jQuery 只有属于一个 [=58= 的评论]:我会切换所有 post 的评论。不过可能有一个解决方案:忘掉 link 并使用包含注释的 divdiv 父级来切换它:

<div id="comments-parent">
  <%= link_to "Show/hide comments", "#", id="comments-link" %>
  <ol id="comments">
    <% post.comments.each do |comment| %>
      <li id="<% comment.id %>">
        <span class="comment-content"><%= comment.content %></span>
      </li>
    <% end %>
  </ol>
</div>

有了 jQuery 我可以做这样的事情:

$('#comments').hide();

$('#comments-parent').click(function() {
    $(this).children('#comments').toggle();
});

这个解决方案太糟糕了...点击一个非常大的区域会切换评论。
第二种情况,<ol id="comments-<%=post.id %>">,可能是解决方案:

$('#comments-all').hide();

$('#comment-link').click(function() {
    $('#comments-1').toggle();
});

但是我不知道如何实现它,或者如果有可能实现它,那就是如何将关于 "all ids starting with comments-" 或最重要的是关于特定 [的信息传递给 jQuery =16=].

你非常接近我会做的。但是,您可以像这样将它绑定到 link:

$('.toggleLink').on('click', function() {
    $(this).closest('.post').find('.comments').toggle();
});

Here 是我认为你想要做的一个例子。

之所以可行,是因为使用了 this,它是 javascript 中基于上下文的变量。在这种特殊情况下,this 指的是触发点击事件的 link 元素。所以从那里我们可以访问 toggle

的正确周围元素