jQuery克隆和删除div不会添加div

时间:2012-07-15 13:09:19

标签: jquery video clone replacewith

我找到了一段帮助我解决原始问题的代码:我有一段标签内容,其中一些内容中包含视频。播放视频时,选择另一个选项卡,视频将继续在后台播放。常见问题我猜:)

无论如何,我发现一些似乎有用的代码,但显然我做错了。这是代码:

// stop video playback when div is hidden
$('.contextual-help-tabs li').click(function() {
    var test = $('.contextual-help-tabs-wrap div.active').attr('id'); // gets previously active div ID
    var clone = $('#'+test).clone(true);                               // clones the previously active div
    $('#'+test).remove();                                              // removes the previously active div
    $('#'+test+'-holder').html(clone);                                 // puts it back like new
});

问题在于:test确实会返回正确的div。它抓取先前在当前和活动之前打开的选项卡的div ID。这是一种享受。它也正好删除了div。

然而,它并没有把它重新投入。当我弹出“警报”以查看发生了什么时,它正在移除div,但从未将其取回(它返回为“未定义”)。所以我不知道clone是不是克隆,还是$('#'+test+'-holder').html(clone);只是不起作用。

作为旁注,我也试过使用这个替代方案:

// stop video playback when div is hidden
$('.contextual-help-tabs li').click(function() {
    var test = $('.contextual-help-tabs-wrap div.active').attr('id'); // gets previously active div ID
    var clone = $('#'+test).clone(true);                               // clones the previously active div
    $('#'+test).replaceWith(clone);                                // replaces the previously active div with the "refreshed" contents of the div
    });

这实际上工作得很好 - 它正在用内容替换内容(视频播放停止)但是 - 如果我在内容中有video标签(即HTML5视频播放),那么,由于某种原因,视频丢失了。返回的HTML 完全正确,但由于我无法理解的原因,视频不再被识别,并且不会播放任何内容。它的行为就像视频根本不存在,或者它是一条不正确的路径。 (我假设这与DOM有关,而不再认识它?)

有谁知道如何修复 版本的代码?因为我无法看到这里发生了什么。

非常感谢!

ETA:作为附注,如果我正在使用replaceWith()函数,并且我转到带有HTML5视频的选项卡并且播放它,那么当我返回时,交换选项卡带有视频的标签,视频仍在那里,工作正常,如果点击“播放”,它将从您交换标签的位置播放(而不是从头开始)。

如果我转到包含视频的标签,并在播放HTML5视频之前转到另一个标签,那么返回带有HTML5视频的标签,然后视频就消失了。这真的很奇怪。

如果有帮助,到目前为止这只发生在Google Chrome中。我还没有真正检查过其他浏览器是否存在问题。

2 个答案:

答案 0 :(得分:0)

您可以尝试使用detach()。在这里找到它http://api.jquery.com/detach/ 它的作用是它实际上从DOM树中删除了一个所需的节点,你可以为它分配一些像这样的变量

var video = $('#videoDivId').detach(); // you can also declare this var global then use it in some other function
$('#someDifferentDiv').append(video);

我有同样的问题,这对我有用

答案 1 :(得分:-1)

不能将.html()方法与jQuery对象一起使用 - 需要使用字符串。

修改:BTW,您在哪里找到.html(clone)代码?