使用jQuery克隆并插入

时间:2012-07-12 16:02:05

标签: jquery

$(document).ready(function() {

     var clone = $("#me_flash_0").clone(true);

     if($('video').attr('class') == "pause_0"){
          $("#me_flash_0").remove();    
     }

     $('.top_item img').click(function(){
            $("#me_flash_0_container").html(clone);
            $(this).hide();     
     });

}

#me-flash_0<embed>元素。 #me_flash_0_container是包装容器。问题是克隆的对象似乎是空的。 html(clone)无效。

Firebug没有显示任何错误。

这是相关的html

<div id="me_flash_0_container" class="me-plugin">
   <embed id="me_flash_0">
</div>
<video class="pause_199" width="586px" height="440" src="some link" autoplay="true" tabindex="0" style="display: none;"></video>

有什么想法吗?

4 个答案:

答案 0 :(得分:1)

这似乎是jQuery和克隆对象元素的错误。

请参阅http://bugs.jquery.com/ticket/10324

解决此问题的一种可能方法是将对象的父容器的内容复制到隐藏的textarea中,然后使用此textarea的val()来克隆新对象。

在此处查看类似方法:Cloning a silverlight embed object results in an empty white element

答案 1 :(得分:1)

    $(document).ready(function() {

         var clone = $("#me_flash_0").clone(true);

         if($('video').attr('class') == "pause_0"){
              $("#me_flash_0").remove();    
         }

         $('.top_item img').click(function(){
                $("#me_flash_0_container").children().remove();
                $("#me_flash_0_container").append(clone);
                $(this).hide();     
         });

    });

正如@techfoobar所写,你不能使用.html()来附加一个jQuery对象。您还在JavaScript的末尾错过了一个末尾括号。

修改:有关类似问题,请参阅this comment

答案 2 :(得分:0)

a)clone是一个完整的jquery扩展元素,而不是一个html字符串。如果您执行.append(clone)而不是.html(clone)

,它应该有效

b)clone被声明为ready(..)函数的本地。您可能需要将其移出到全局变量中,因为您事先不知道触发单击事件处理程序的时间

答案 3 :(得分:0)

我看到的问题可能会导致这个......

  • 您正准备在DOM上准备对象 从相关代码开始,该对象似乎是空的,这是在变量中缓存的内容。 (你应该添加一个结束</embed>标签) 我不知道应该在embed元素中出现什么,所以不确定没有任何事情发生的事实是预期的功能还是没有...
  • $('video').attr('class')将返回应用于DOM中第一个 video元素的类。在示例代码中class_199。但是您与class_0进行比较,因此它永远不会匹配,也不会删除#me_flash_0元素。