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

2023-12-28

请看一下下面的代码:

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

在第一个链接中有一个包含 html 特殊字符的 title 属性<其次是 ”!” (实际上后面跟着哪个字符并不重要)。 当我们使用 jQuery 的 attr() 函数获取该 title 属性的值时,html 就会被破坏(您可以看到,只要下面的文本也丢失,就不会打印“

在第二个链接中,唯一的区别是我在后面添加了一个空格<现在它按预期工作了。

你认为这是 jQuery 中的一个错误还是我只是不明白什么?

附言。如果您认为我在做一些奇怪的事情 - 这只是一些工具提示插件中的一些代码。

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>​

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>");​

这很有趣。我查了一下a中可以包含什么文本title属性 http://www.w3.org/TR/html401/types.html#type-cdata参考文献说:

用户代理应按如下方式解释属性值:

  1. 用字符替换字符实体,
  2. 忽略换行,
  3. 将每个回车符或制表符替换为一个空格。

显然,这是预期的行为。&lt;被解析为<由浏览器执行,它可能被 jQuery 解释为 HTML。

您也应该转义 & 符号:

&amp;lt;

Demo: http://jsfiddle.net/htdTg/9/ http://jsfiddle.net/htdTg/9/

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

jQuery 的 attr() 函数用 html 特殊字符破坏 html? 的相关文章