jQuery URI encode(char&)。html()属性值

时间:2010-06-23 11:56:59

标签: javascript jquery html

我在最后一天阅读了很多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&amp;YXX=xyzz ...

当我使用时:

$("#preview_small object").clone().children("embed").attr("src");

返回

main.swf?XY=xyz&YXX=xyzz

我有什么想法可以得到'&amp;' char直接,在我使用.html()

获取字符串后不使用正则表达式

1 个答案:

答案 0 :(得分:1)

  

我需要嵌入代码中的&字符。

不,不。这样:

<embed src="xyz&YXX=xyz"></embed>

是无效的HTML。它可以在浏览器中工作,因为它们试图修复这样的错误,但只要字符串YXX不匹配HTML实体名称。你不想依赖它。

此:

<embed src="xyz&amp;YXX=xyz"></embed>

是正确的,适用于所有地方,是您应该告诉用户复制和粘贴的版本。

  

attr("src")返回xyz&YXX=xyz

是的,这是该属性的基础价值。属性值和文本内容几乎可以包含任何字符。它们只是必须编码的HTML序列化:

<div title="a&lt;b&quot;&amp;c&gt;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, '&amp;').replace(/</g, '&lt;').replace(/"/g, '&quot;');
}

var src= 'XY=xyz&YXX=xyzz';
$('#foo').val('<embed src="'+encodeHTML(src)+'"><\/embed>');

(关闭标记中的\/只是为了不会被误认为是<script>块的结尾,以防你在其中。)