我正在尝试使用jQuery通过AJAX在网页上嵌入flash电影。 flash影片从查询字符串中接收了几个命令。
通过AJAX命令jQuery返回嵌入flash影片的HTML代码,此代码具有&在查询字符串中然后转换为& amp; - 这会破坏代码并停止显示Flash影片。 dataType是“text”,而不是ajax调用中的“html”。
我四处搜寻,看到有几个人遇到了这个问题。显然,主要问题是使用.html()或.append()将代码插入网页会自动转换为&到& amp; - 我希望能够在没有这种情况下插入代码。但是我很乐意再次将它们转换回来(这似乎是我见过的问题的主要解决方案),但这对我来说根本不起作用。
我正在运行这段代码来替换所有& amp; amp;与&:
$(target+' embed').attr('src',function(){
var currentHref=$(this).attr('src');
var newHref=currentHref.replace(/amp;/ig,'');
return newHref;
});
其中target是flash影片所在的容器div的Id。此代码没有找到任何& amp; - 但是当我查看源和& amp;仍然存在,闪光电影仍无法正常工作。
我很高兴能够在没有此功能的情况下插入代码。到& amp;转换正在发生。这可以用jQuery完成吗?如果做不到这一点,我怎么能得到这些代码来取代所有的& amp; amp;与&?
很抱歉这个很长的问题和TIA。
答案 0 :(得分:3)
裸露的未转义&
只是无效的HTML。没有理由在标记中包含一个。
任何浏览器在看到&
不属于实体引用时,都会修复它以纠正错误。这种情况发生在解析时,无论是在加载文档时,还是在innerHTML
设置为html()
和append()
时都会发生。
浏览器不记得您的原始标记,而只记住一组反映页面当前状态的对象和属性(“DOM”)。通过解析输入HTML来填充这些对象,但是如果通过读取innerHTML
或html()
来获取标记,您将获得从DOM对象创建的新序列化标记集,并且不是您最初输入的标记。您将看到空格,属性顺序的差异,以及原始标记中的任何错误都将得到修复。
当您从脚本中与文档进行交互时,在属性级别attr()
或text()
上,您将直接访问DOM而不要求它将其返回的信息序列化为HTML标记。在这种情况下,您将使页面上的&符号变为简单&
,而不是转义。因此,在这种情况下,你的正则表达式将无法找到任何替换;只有没有'基础标记'供您进行编辑。
所以真正的问题是,你最后会遇到什么字符串'让代码失败',以及如何处理?这在发布的问题中不可见。
答案 1 :(得分:0)
如果
target是flash电影所在的容器div的ID
然后第一行中的语法如果关闭则应该
$('#target embed').attr('src',function(){