jQuery转换&进入&并打破我的代码。我怎么能阻止这个?

时间:2011-11-09 15:14:47

标签: javascript jquery character-encoding

我正在尝试使用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。

2 个答案:

答案 0 :(得分:3)

裸露的未转义&只是无效的HTML。没有理由在标记中包含一个。

任何浏览器在看到&不属于实体引用时,都会修复它以纠正错误。这种情况发生在解析时,无论是在加载文档时,还是在innerHTML设置为html()append()时都会发生。

浏览器不记得您的原始标记,而只记住一组反映页面当前状态的对象和属性(“DOM”)。通过解析输入HTML来填充这些对象,但是如果通过读取innerHTMLhtml()来获取标记,您将获得从DOM对象创建的新序列化标记集,并且不是您最初输入的标记。您将看到空格,属性顺序的差异,以及原始标记中的任何错误都将得到修复。

当您从脚本中与文档进行交互时,在属性级别attr()text()上,您将直接访问DOM而不要求它将其返回的信息序列化为HTML标记。在这种情况下,您将使页面上的&符号变为简单&,而不是转义。因此,在这种情况下,你的正则表达式将无法找到任何替换;只有没有'基础标记'供您进行编辑。

所以真正的问题是,你最后会遇到什么字符串'让代码失败',以及如何处理?这在发布的问题中不可见。

答案 1 :(得分:0)

如果

  

target是flash电影所在的容器div的ID

然后第一行中的语法如果关闭则应该

$('#target embed').attr('src',function(){