Javascript 如何在JQuery中克隆变量html元素
我有一组div,它们是数据库的元素,我想为每个div设置一个事件,这样,如果我单击其中一个div,它就会被克隆。 我试过了,但没用, 以下是我页面上的代码:Javascript 如何在JQuery中克隆变量html元素,javascript,ruby-on-rails,coffeescript,Javascript,Ruby On Rails,Coffeescript,我有一组div,它们是数据库的元素,我想为每个div设置一个事件,这样,如果我单击其中一个div,它就会被克隆。 我试过了,但没用, 以下是我页面上的代码: <% @ideas.each do |idea| %> <div id="idea_<%=idea.id%>" class="idea"> <%= idea.title %> </div> <% end %> 有什么想法吗?这里有一个稍加修改的版本,
<% @ideas.each do |idea| %>
<div id="idea_<%=idea.id%>" class="idea">
<%= idea.title %>
</div>
<% end %>
有什么想法吗?这里有一个稍加修改的版本,可以满足您的需求。在Javascript/Coffeescript中,有一件事需要时刻牢记,那就是代码将在哪个范围内运行。在这种情况下,使用
do
关键字非常重要,以便正确捕获iter
变量。没有它,当你点击任何想法时,它总是会克隆最后一个想法,因为当点击处理程序实际执行时,iter
将到达循环的末尾
ideas = document.getElementByClassName("idea")
for iter in [0...ideas.length]
do (iter) ->
ideas[iter].click -> ideas[iter].clone().appendTo('.container');
这是一个经过修改的版本,它也稍微干净了一点。jQuery可以为您处理所有这些操作
$('.idea').click ->
$(@).clone().appendTo('.container')
你想用“获取id”部分做什么?我只是有点忽略它,所以如果我误解了,请告诉我
编辑:
要只克隆一次,最简单的方法是使用jQuery的方法而不是“bind”
$('.idea').one 'click', ->
$(@).clone().appendTo('.container')
说得好。最后一种方法是最好的,当jQuery设置
this
指向click
回调中单击的元素时,无需捕获iter
。
$('.idea').one 'click', ->
$(@).clone().appendTo('.container')