jQuery корректно изменяет исходный код, но не выводит результат страницы. (с доказательством jsFiddle) - PullRequest
0 голосов
/ 30 октября 2011

Вот мой jQuery:

$("object").each(function(){
    video_url  = $(this).find('embed').attr('src');
    new_video_url = video_url+"&autohide=1&modestbranding=1&showinfo=0&theme=light";
    $(this).find('embed').attr('src', new_video_url);
    $(this).find('param:eq(0)').val(new_video_url);
    $(this).find('embed').before('<param name="autoplay" value="1"><param name="showinfo" value="1"><param name="modestbranding" value="1"><param name="hd" value="1"><param name="color" value="white"><param name="autohide" value="1">');
});

Вот как выглядел код до jQuery:

<object width="500" height="371">
    <param name="movie" value="http://www.youtube.com/v/ISeQBRUa8xQ&amp;rel=0&amp;egm=0&amp;showinfo=0&amp;fs=1">
    <param name="wmode" value="transparent">
    <param name="allowFullScreen" value="true">
    <embed 
        src="http://www.youtube.com/v/ISeQBRUa8xQ&amp;rel=0&amp;egm=0&amp;showinfo=0&amp;fs=1" 
        type="application/x-shockwave-flash" 
        width="500" 
        height="371" 
        allowfullscreen="true" 
        mode="transparent"
    >
</object>

Вот как это выглядит после выполнения jquery.

<object width="500" height="371">
    <param name="movie" value="http://www.youtube.com/v/ISeQBRUa8xQ&rel=0&egm=0&showinfo=0&fs=1&autohide=1&modestbranding=1&showinfo=0&theme=light">
    <param name="wmode" value="transparent">
    <param name="allowFullScreen" value="true">
    <param name="autoplay" value="1">
    <param name="showinfo" value="1">
    <param name="modestbranding" value="1">
    <param name="hd" value="1">
    <param name="color" value="white">
    <param name="autohide" value="1">
    <embed 
        src="http://www.youtube.com/v/ISeQBRUa8xQ&rel=0&egm=0&showinfo=0&fs=1&autohide=1&modestbranding=1&showinfo=0&theme=light" 
        type="application/x-shockwave-flash" 
        width="500" 
        height="371" 
        allowfullscreen="true" 
        wmode="transparent"
        >
</object>

Несмотря на то, что HTML-код успешно изменился, при отображении страницы обновленный код не отображается.

Вот jsFiddle, подтверждающий проблему: http://jsfiddle.net/4kQYy/4/

Если вы проверите второе видео на YouTube в своем инспекторе, вы увидите, что он действительно правильно вводит код на 100%, однако визуализация страницы не отражает обновления.Как это может быть?Конечно, то, что вы видите в исходном коде, это то, что вы видите на экране?Помогите!

1 Ответ

2 голосов
/ 30 октября 2011

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

  1. Вы инициализируете экземпляр флэш-памяти
  2. При инициализации флэш-фильм получает параметры и действует соответствующим образом
  3. После этого вы меняетепараметры, которые больше не влияют на флэш-ролик

Что вы можете сделать, это либо перенести весь процесс создания флэш-памяти на javascript.Это означает, что вы генерируете весь тег объекта.Или вы отсоединяете тег объекта, вносите изменения и заново вставляете его.Я обновил код в вашей скрипке

$("#foobar").each(function(){
    var parent = $(this).parent(),
        object = $(this).detach()

    video_url  = object.find('embed').attr('src');
    new_video_url = video_url+"&autohide=1&modestbranding=1&showinfo=0&theme=light";
    object.find('embed').attr('src', new_video_url);
    object.find('param:eq(0)').val(new_video_url);
    object.find('embed').before('<param name="autoplay" value="1"><param name="showinfo" value="1"><param name="modestbranding" value="1"><param name="hd" value="1"><param name="color" value="white"><param name="autohide" value="1">');
    parent.append(object);
});

Я знаю, что это работает не во всех случаях, особенно, если у родителя более одного ребенка, но это должно дать вам общееидея.

...