我有一个动态生成的课程列表' book'。部分看起来像这样:
_book.html.erb:
<div class="book">
<%= link_to "edit", edit_book_path(book), remote: true %>
<div class="content">
<%= link_to book.title, book.link %>
</div>
<div class="editform" style="display:none"></div>
</div>
books_controller:
def edit
@book = Book.find(params[:id])
respond_to do |format|
format.html
format.js
end
end
这就是我想要做的:我想得到名为edit的链接的父div,然后更改其子类。显然$(这个)不起作用。
3年前有人问the same question,所有回复都说要使用ID。我真的不想在edit.js.erb中通过ID引用特定元素,因为它们是动态生成的(如果必须,我可以这样做,但我确定在那里&#39; sa很好的方式来做到这一点)。
books / edit.js.erb(不工作)
var $bookdiv = $(this).parent();
$bookdiv.find('.editform').html("<%= escape_javascript(render 'books/formBookFull', book: @book)%>");
$bookdiv.find('.editform').show();
$bookdiv.find('.content').hide();
有没有一个很好的方法来做这个或一个不错的选择?我也尝试将其作为一个onclick函数直接作为临时黑客,但即使这样也没有用,因为jquery由于某种原因没有在部分工作。
非常感谢你的帮助!
答案 0 :(得分:1)
您应该使用您的记录ID,HTML5 data
属性完全针对此类情景制作
_book.html.erb:
<div class="book" data-id="<%= book.id %>">
<%= link_to "edit", edit_book_path(book), remote: true %>
<div class="content">
<%= link_to book.title, book.link %>
</div>
<div class="editform" style="display:none"></div>
</div>
edit.js.erb
var $bookdiv = $('div.book[data-id="<%= @book.id %>"]');
$bookdiv.find('.editform').html("<%= escape_javascript(render 'books/formBookFull', book: @book)%>");
$bookdiv.find('.editform').show();
$bookdiv.find('.content').hide();