2010-11-07 1 views
1

Вот кодJquery страница загрузки элемент работает со всем, кроме видео

$(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-плеер добавляет строку кода в верхнюю часть содержимого, но не может найти, что это за строка.

+0

образцов в http://www.divethegap.com/update/community/videos/ (нажмите тестовые видеоролики). –

+0

Что находится на загруженной странице? –

+0

\t \t \t \t \t \t
(и ничего более) Все работает нормально, если я скажу ему, чтобы загрузить всю страницу, а не только «#content_inload», но «#content_inload» - это вся страница. Просто образец для проверки проблемы - это не то, как будет закончен результат. –

ответ

1

Если вы видите исходный код 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 
); 
... 

Так, если селектор предоставляется (как в вашем случае) они удалить сценарий, чтобы избежать Permission Denied ошибки в 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 в себе, по сути тиражирование ..


Update

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

$("#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() без фильтрации ничего из ..

+0

Спасибо, что рассказал мне о проблеме IE.Внедрили свой код, но все равно видео не загружается. Видео загружается только в том случае, если скрипт не определяет элемент для загрузки. –

+0

@Robin, добавлена ​​альтернатива плюс некоторые комментарии .. –

+0

Спасибо за вашу помощь –

Смежные вопросы