使用jQuery.attr()转义属性值
Escaping of attribute values using jQuery.attr()
当使用jQuery更新元素的title
属性时,我发现实体(尤其是
,这是目前建议在title
属性中添加换行符的方法)显示不正确(实体显示为文本,并且没有解析…)。
例如:
<!-- This works fine -->
<div title="foo bar">baz</div>
但是这个:
<div>baz</div>
<script>
$("div").attr('title', 'foo bar'); // Escapes the &
</script>
有没有办法不让jQuery转义该值?在.attr()
之前,我尝试过使用unescape()
,但它不起作用…
jQuery没有转义任何内容,事实上,您的字符串实际上被设置为标题。你可以简单使用:
$("div").attr('title','foo'nbar')
http://jsfiddle.net/t5DvY/
人们似乎对逃避的含义有很多误解。你所做的完全没有必要。
只有在角色有特殊含义,并且你希望它没有任何特殊含义的情况下,才需要转义。
例如,在html解析器眼中,<
是特殊的。如果您想确保它被视为文字,则必须将其替换为<
<
。在html解析器的眼中强调。在javascript中,<
在字符串中没有任何特殊性,因此您可以做elem.setAttribute("title", '""><b>hi</b>')
,这就是你得到的,元素的标题将是""><b>hi</b>
。
至于html代码点引用,它们通常是无用的。您可以简单地使用文字字符。不必编写♥
,只需写入CCD_ 13。您可以简单地编写ö
,而不是编写ö
。这是http://jsfiddle.net/fnqDn/2/.
你是对的;unescape()
在这种情况下将不起作用。你能做的事情与这里的答案中提到的类似。
基本上,使用jQuery创建一个空元素,将其HTML设置为标题中所需的文本(本例中为'foo bar'
),然后返回元素的文本。
听起来有点复杂?是的,但这适用于任何HTML实体,实际上只是一行代码。这是代码:
<div>baz</div>
<script>
var title = $('<div/>').html('foo bar').text();
$("div").attr('title', title);
</script>
或者在一行:
$('div').attr('title', $('<div/>').html('foo bar').text());
如果您经常这样做,此函数将为您节省时间:
function unescp(x){
return $('<div/>').html(x).text();
}
$("div").attr('title',unescp('foo bar'));
请在此处查看:http://jsfiddle.net/9Lnru/
您可以尝试将值放在隐藏元素中。让jquery将该值复制到div中。我不确定它是否会在不被注意的情况下通过jquery,但值得一试。。。
- RegEx删除空属性?例如,如果(class=“”||class=“”)移除;否则就下课
- 使用jQuery.attr()转义属性值
- 数据属性在动态添加时不以所需的格式呈现,不转义双引号
- 在 IE 中将“<”和“>”作为元素属性值的一部分进行转义
- JavaScript - 转义 JavaScript Object 属性值中的单引号
- 使用属性等于选择器时转义元素名称中的方括号
- 转义对象的所有属性
- 解析javascript中带有转义双引号属性的JSON对象
- 如何转义一个javascript变量在一个thyymleaf属性
- 在JSF组件属性中转义EL中的JavaScript引号
- 在Javascript中转义html属性中的双引号
- Jquery获取XML属性值,用转义不工作
- 转义HTML标记属性中的双引号
- Jquery -带有转义html的tag属性自动不转义
- 处理模型属性中的转义字符
- 使用Javascript在HTML5数据属性中转义引号
- 剃刀转义数据属性中的单引号
- HTML属性转义
- 转义onclick生成的HTML具有带有CSS属性选择器的jQuery函数
- 如何正确转义css/js属性选择器[attr=value]中的属性值