我在最后一天阅读了很多HTML编码帖子来解决这个问题。我只是设法找到它。 基本上我用jQuery在embed标签上设置了一个属性。一切都在浏览器中正常工作。 不,我想阅读HTML本身,将结果添加为输入字段的值,以便让用户复制&过去了。
问题是.html()函数(也是普通的JS .innerHTML)转换'&' char 进入'&放大器;” (没有空格)。使用差异html编码器功能并没有什么区别。我需要'&'嵌入代码中的字符。
这是代码:
HTML:
<div id="preview_small">
<object><embed src="main.swf?XY=xyz&YXX=xyzz"></embed>
</object></div>
jQuery的:
$("#preview_small object").clone().html();
返回
... src=main.swf?XY=xyz&YXX=xyzz ...
当我使用时:
$("#preview_small object").clone().children("embed").attr("src");
返回
main.swf?XY=xyz&YXX=xyzz
我有什么想法可以得到'&amp;' char直接,在我使用.html()
获取字符串后不使用正则表达式答案 0 :(得分:1)
我需要嵌入代码中的
&
字符。
不,不。这样:
<embed src="xyz&YXX=xyz"></embed>
是无效的HTML。它可以在浏览器中工作,因为它们试图修复这样的错误,但只要字符串YXX
不匹配HTML实体名称。你不想依赖它。
此:
<embed src="xyz&YXX=xyz"></embed>
是正确的,适用于所有地方,是您应该告诉用户复制和粘贴的版本。
attr("src")
返回xyz&YXX=xyz
是的,这是该属性的基础价值。属性值和文本内容几乎可以包含任何字符。它们只是必须编码的HTML序列化:
<div title="a<b"&c>d">
$('div').attr('title') -> a<b"&c>d
我想阅读HTML本身,将结果添加为输入字段的值
<textarea id="foo"></textarea>
$('#foo').val($('#preview_small object').html());
但请注意,innerHTML
/ html()
的序列化输出不是HTML的任何特定固定方言,特别是IE可能会为您提供尽管浏览器通常可以理解的代码,但也不是技术上有效:
$('#somediv').html('<div title="a/b"></div>');
$('#somediv').html() -> '<DIV title=a/b></DIV>' - missing quotes
因此,如果您知道要向用户呈现的HTML的特定格式,您可能最好自己生成它:
function encodeHTML(s) {
return s.replace(/&/g, '&').replace(/</g, '<').replace(/"/g, '"');
}
var src= 'XY=xyz&YXX=xyzz';
$('#foo').val('<embed src="'+encodeHTML(src)+'"><\/embed>');
(关闭标记中的\/
只是为了不会被误认为是<script>
块的结尾,以防你在其中。)