jQuery的attr()函数用html特殊字符打破html?

nig*_*der 5 html javascript jquery

请看下面的代码:

http://jsfiddle.net/htdTg/2/

在第一个链接中有一个title属性,其中包含html特殊字符,&lt;后跟"!" (实际上跟随哪个角色并不重要).当我们使用jQuery的attr()函数获取该title属性的值时,html被破坏(只要以下文本也缺失,您就可以看到没有打印"<"字符.

在第二个链接中唯一的区别是我之后添加了一个空格&lt;,现在它按预期工作.

你认为这是jQuery中的一个错误还是我不明白的东西?

PS.如果你认为我做了一些奇怪的事情 - 它只是来自某个工具提示插件的一些代码.

HTML:

<a href="#" title="<div style='color:red'>This is the less than sign: &lt;! Now you know it?</div>">This is a link</a><br>
<a href="#" title="<div style='color:red'>This is the less than sign: &lt; ! Now you know it?</div>">This is a link</a><br>?
Run Code Online (Sandbox Code Playgroud)

jQuery的:

$('a').each(function() {
    $('body').append($(this).attr('title')); });

// just to exclude that it's append() function's fault :)
$('body').append("<div style='color:red'>This is the less than sign: &lt;! Now you know it?</div>");?
Run Code Online (Sandbox Code Playgroud)

Ble*_*der 5

这非常有趣.我查找了title属性中的文本,参考文献说:

用户代理应解释属性值,如下所示:

  1. 用字符替换字符实体,
  2. 忽略换行,
  3. 用一个空格替换每个回车或标签.

显然,这是预期的行为.&lt;正在被<浏览器解析,可能被jQuery解释为HTML.

你也应该逃避&符号:

&amp;lt;
Run Code Online (Sandbox Code Playgroud)

演示:http://jsfiddle.net/htdTg/9/

更好的演示:http://jsfiddle.net/PsZeY/6/