2
$(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

4 回答 4

1

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

http://bugs.jquery.com/ticket/10324

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

在此处查看类似的方法:克隆 silverlight 嵌入对象会导致空白元素

于 2012-07-15T09:11:44.310 回答
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 末尾的括号。

编辑:看到这个关于类似问题的评论。

于 2012-07-15T09:29:01.717 回答
0

a)clone是一个完整的 jquery 扩展元素,而不是一个 html 字符串。如果你这样做,它应该工作.append(clone)而不是.html(clone)

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

于 2012-07-12T16:05:55.737 回答
0

我看到的可能导致这种情况的问题...

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