Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在JQuery中克隆变量html元素_Javascript_Ruby On Rails_Coffeescript - Fatal编程技术网

Javascript 如何在JQuery中克隆变量html元素

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 %> 有什么想法吗?这里有一个稍加修改的版本,

我有一组div,它们是数据库的元素,我想为每个div设置一个事件,这样,如果我单击其中一个div,它就会被克隆。 我试过了,但没用, 以下是我页面上的代码:

<% @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')