安全的javascript字符,用作列表Id属性中的键值对

时间:2012-12-12 12:07:12

标签: javascript html json

我有一个树视图(使用dyna树版本),我已经扩展了JS以包含多个上下文菜单。

最初我在使用

<li id="@ID@:3.@TYPE@:3">

保存我可能需要的详细信息并将其转换为JSON,如下所示:

//Gets the ID value
var node = $.ui.dynatree.getNode(span).toString()
node = node.replace(/|/g, '\"')
node = node.replace(".", ',')
node = jQuery.parseJSON('{' + node + '}');

这很好,但不幸的是,这是用于剃刀MVC视图,所以@已经出局了。我想要@@所以想到了一个|可能是一个更好的分离器

<li id="|ID|:3.|TYPE|:3">

但是将JS改为

var node = $.ui.dynatree.getNode(span).toString()
node = node.replace(/|/g, '\"')
node = node.replace(".", ',')
node = jQuery.parseJSON('{' + node + '}');
解析JSON时,

给出了一个错误。对于什么是错误以及我应该使用什么角色有什么建议吗?

2 个答案:

答案 0 :(得分:1)

正则表达式应该是/\|/g,因为|是正则表达式中的特殊字符。无论如何,这是非常可怕的方法,你可以直接在一个元素中使用json:

<span id="hello" data-json='{"ID":3, "TYPE": 3}'></span>

当你使用.data()

时,jQuery甚至会为你自动解析json
$("#hello").data("json").TYPE; //3

http://jsfiddle.net/jJQ7z/

答案 1 :(得分:0)

您不应该为id使用这些类型的值。 id应该是页面上给定对象的简单主格标识符,首先用于获取JavaScript调用的对象。优良作法是仅向页面上需要它们的元素提供ID,因为它会阻止您在不使用它们的元素上使用好的id名称。

如果您需要在代码中添加补充数据,则可以创建以data-开头的自定义代码。您可以将任何您想要的信息放入您想要的这些类型的标签中,它仍然是完全有效的HTML。例如:

<li data-myId="3" data-type="3">

然后,您可以像在任何其他属性值中一样在JavaScript中检索这些值。