如何在ID-Attribute中存储HTML-Markup?

时间:2012-06-17 17:47:23

标签: javascript html store

我需要为每个链接显示动态一些带有Java脚本(jQuery)的文本。问题是文本也被格式化为HTML,因此这会在后面的视图中引起一些问题。 现在我将它存储在ID属性中,这是有效的,但只是没有嵌入HTML。

<?php
...
$desc = '<p style="color: red">some <span>data</span></p>';
echo '<a href="#" id="' . $desc . '">' . $key . '</a>';
?>

不允许Ajax请求。有没有一种简单的方法来实现这一目标?

2 个答案:

答案 0 :(得分:13)

id属性是最不合适的地方之一(必须是唯一的,不能包含所有字符)。使用data-属性(在HTML5中引入,但也适用于旧浏览器而不使用HTML5 doctype):

<a href="#" data-desc="....">

如果您使用的是jQuery,可以通过.data('desc')访问它,在普通的JavaScript中,最便携的方式是使用.getAttribute('data-desc')。如果您不需要支持旧版浏览器,则可以通过.dataset.desc属性访问该值。

在任何情况下,您都需要确保在属性中插入动态数据时不会出现任何问题。为此目的使用htmlspecialchars()

$desc = '<p style="color: red">some <span>data</span></p>';
echo '<a href="#" data-desc="' . htmlspecialchars($desc) . '">' . $key . '</a>';

答案 1 :(得分:1)

其他评论绝对正确。不要这样做。在id属性中添加除某种标识符之外的任何内容都是不合适的。

话虽这么说,我想我会告诉你为什么你的代码失败了。在尝试按预期使用之前,您需要对数据使用htmlspecialchars()。这样,HTML将不会被解释为HTML ...将转换所有HTML实体,因此您的属性值将被解释为文本。 <变为&lt;>变为&gt;,依此类推。如果您稍后将值拉出(使用jQuery或其他),您将获得预期的文本。