jQuery正确地更改了源代码,但没有更改呈现的页面结果。 (用jsFiddle证明)

时间:2011-10-30 18:34:37

标签: jquery html dom-manipulation

这是我的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 个答案:

答案 0 :(得分:2)

我不是闪存专家,但我的逻辑说,你要做的事情是行不通的。在我看来,会发生以下步骤:

  1. 初始化Flash实例
  2. 初始化时,flash影片获取参数并采取适当的行动
  3. 之后你改变了参数,这对闪光电影不再有影响
  4. 你可以做的是将整个flash实例化过程移动到javascript。这意味着您生成整个对象标记。或者,您分离对象标记,进行自定义并再次重新插入。我更新了fiddle

    中的代码
    $("#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);
    });
    

    我知道这并不适用于所有情况,特别是如果父母有多个孩子,但它应该给你一个大概。