JQuery клонирование и удаление div не добавляет div обратно

Я нашел фрагмент кода, который помог мне с моей первоначальной проблемой: у меня есть раздел с вкладками, в котором есть видео. Когда вы воспроизводите видео, затем выбираете другую вкладку, видео продолжает воспроизводиться в фоновом режиме. Общая проблема, я думаю:)

В любом случае я нашел какой-то код, который, кажется, работал, но, видимо, я сделал что-то не так. Это код:

// 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 вкладки, которая была ранее открыта до текущей и активной, одной. Это работает удовольствие. это также удаляет 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 ответа

Вы можете попробовать использовать 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);

У меня была такая же проблема, это работало на меня

Нельзя использовать .html() метод с объектом jQuery - нужно использовать строку.

Редактировать: Кстати, где вы нашли .html(clone) код?

Другие вопросы по тегам