使用jQuery.attr()转义属性值

Escaping of attribute values using jQuery.attr()

本文关键字:转义 属性 jQuery attr 使用      更新时间:2023-12-30

当使用jQuery更新元素的title属性时,我发现实体(尤其是
,这是目前建议在title属性中添加换行符的方法)显示不正确(实体显示为文本,并且没有解析…)。

例如:

<!-- This works fine -->
<div title="foo&#10;bar">baz</div>

但是这个:

<div>baz</div>
<script>
$("div").attr('title', 'foo&#10;bar'); // Escapes the &
</script>

有没有办法不让jQuery转义该值?在.attr()之前,我尝试过使用unescape(),但它不起作用…

jQuery没有转义任何内容,事实上,您的字符串实际上被设置为标题。你可以简单使用:

$("div").attr('title','foo'nbar')

http://jsfiddle.net/t5DvY/


人们似乎对逃避的含义有很多误解。你所做的完全没有必要。

只有在角色有特殊含义,并且你希望它没有任何特殊含义的情况下,才需要转义。

例如,在html解析器眼中,<是特殊的。如果您想确保它被视为文字,则必须将其替换为&lt;<。在html解析器的眼中强调。在javascript中,<在字符串中没有任何特殊性,因此您可以做elem.setAttribute("title", '""><b>hi</b>'),这就是你得到的,元素的标题将是""><b>hi</b>

至于html代码点引用,它们通常是无用的。您可以简单地使用文字字符。不必编写&#x2665;,只需写入CCD_ 13。您可以简单地编写ö,而不是编写&#x00F6;。这是http://jsfiddle.net/fnqDn/2/.

你是对的;unescape()在这种情况下将不起作用。你能做的事情与这里的答案中提到的类似。

基本上,使用jQuery创建一个空元素,将其HTML设置为标题中所需的文本(本例中为'foo&#10;bar'),然后返回元素的文本。

听起来有点复杂?是的,但这适用于任何HTML实体,实际上只是一行代码。这是代码:

<div>baz</div>
<script>
    var title = $('<div/>').html('foo&#10;bar').text();
    $("div").attr('title', title);
</script>

或者在一行:

$('div').attr('title', $('<div/>').html('foo&#10;bar').text());

如果您经常这样做,此函数将为您节省时间:

function unescp(x){
 return $('<div/>').html(x).text();
}
$("div").attr('title',unescp('foo&#10;bar'));

请在此处查看:http://jsfiddle.net/9Lnru/​

您可以尝试将值放在隐藏元素中。让jquery将该值复制到div中。我不确定它是否会在不被注意的情况下通过jquery,但值得一试。。。