Jquery 如何在不使用IDs的情况下在.js.erb文件中使用$(this)(RubyonRails)

Jquery 如何在不使用IDs的情况下在.js.erb文件中使用$(this)(RubyonRails),jquery,ruby-on-rails,Jquery,Ruby On Rails,我有一个动态生成的“book”类div列表。部分内容如下所示: _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> &l

我有一个动态生成的“book”类div列表。部分内容如下所示:

_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>
<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的链接的父div,然后更改其子类。显然,这是行不通的

三年前有人问过,所有的回答都是使用ID。我真的不想在edit.js.erb中按ID引用特定元素,因为它们是动态生成的,如果有必要,我可以这样做,但我相信有一种很好的方法可以做到这一点

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函数作为临时的hack,但即使这样也不起作用,因为jquery由于某种原因在部分中不起作用


非常感谢你的帮助

您应该使用您的记录id,HTML5数据属性正是针对这种场景而创建的

_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>
<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();

您应该使用您的记录id,HTML5数据属性正是针对这种情况而创建的

_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>
<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();

在选择器周围加上引号:.find'.editform'…每个人都有这样的错误;编辑以修复此问题。但问题是$this如果我去掉除第一行以外的所有内容,javascript仍然会被破坏。在选择器周围加上引号:.find'.editform'…每个人都有类似的错误;编辑以修复此问题。但问题是$this,如果我去掉除第一行以外的所有内容,javascript仍然被破坏。这太棒了!我现在需要去阅读HTML5数据属性。是的,你可以用它实现很多事情,HTML中的数据便于传递应用程序相关信息,javascript端的数据更复杂,可以存储javascript对象,在更新javascript中的数据值时有一些问题。但你的情况很简单,太好了!我现在需要去阅读HTML5数据属性。是的,你可以用它实现很多事情,HTML中的数据便于传递应用程序相关信息,javascript端的数据更复杂,可以存储javascript对象,在更新javascript中的数据值时有一些问题。但你的情况很简单