0

我找到了一段代码,可以帮助我解决最初的问题:我有一段选项卡式内容,其中一些内容中有视频。当您播放视频,然后选择另一个选项卡时,视频会在后台继续播放。我猜常见的问题:)

无论如何,我发现了一些似乎可以工作的代码,但显然我做错了什么。这是代码:

// 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 视频的选项卡,那么视频就消失了。这真的很奇怪。

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

4

2 回答 2

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);

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

于 2012-07-15T13:23:11.683 回答
-1

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

编辑:顺便说一句,你在哪里找到.html(clone)代码?

于 2012-07-15T13:14:16.037 回答