Страница элемента Jquery Load работает со всем, кроме видео - PullRequest
1 голос
/ 07 ноября 2010

Вот код

$(function() {
    if(location.hash) $("#content_inload").load(location.hash.substring(1) + ' #content_inload'); 
    $("#nav a").click(function() {
        $("#content_inload").load(this.hash.substring(1) + ' #content_inload');
    });
});

По какой-то причине он загрузит все, но не загрузит видеоплеер jw. Однако, если я попрошу его загрузить всю страницу, а не просто «#content_inload», он загрузит видео, даже если на этой странице нет раздела заголовка, нет сценариев и он не больше, чем содержимое внутри «#content_inload». Я могу только предположить, что проигрыватель JW добавляет строку кода внизу верхней части содержимого, но не может найти, что это за строка.

1 Ответ

1 голос
/ 07 ноября 2010

Если вы видите исходный код jquery о методе .load(), он делает

...
self.html( 
    selector ?
    // Create a dummy div to hold the results
    jQuery("<div>")
        // inject the contents of the document in, removing the scripts
        // to avoid any 'Permission Denied' errors in IE
        .append(res.responseText.replace(rscript, ""))

        // Locate the specified elements
        .find(selector) :

    // If not, just inject the full result
    res.responseText 
);
...

Поэтому, если предоставляется селектор (как в вашем случае), они удаляют сценарий, чтобы избежать ошибок «Отказ в доступе» в IE.

Вам нужно будет имитировать этот код, используя метод jquery .get()

что-то вроде

$("#nav a").click(function() {
    $.get( this.hash.substring(1), function(response){
      var dummy = $('<div>').append( response ).find('#content_inload');
      $("#inload_container").html(dummy);
    } );
});

Также обратите внимание, что я использовал #inload_container в качестве целевого элемента, поскольку вы вставляли #content_inload в себя, фактически дублируя ..


Обновление

Ну после вашего комментария я попробовал следующее, что сработало

$("#nav a").click(function() {
    $.get( this.hash.substring(1), function(response){
      $("#inload_container").empty().append(response).find('>*:not(#content_inload)').remove();
    } );
});

Кажется, что может возникнуть проблема при создании элементов сценария в объектах jquery в памяти? ( не могу быть уверен в причине )

В вашем конкретном случае вышеприведенное решение будет работать, но оно не очень элегантно, в том смысле, что оно добавляет в DOM все, что возвращается из вызова ajax, а затем отфильтровывает то, что нам не нужно ..

Может быть, лучше всего изменить реальную видео-страницу (, загруженную из ajax ) и сделать обычный .load() без фильтрации чего-либо ..

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...