0

我有一个树视图(使用动态树版本),并且我已经扩展了 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 时给我一个错误。有什么关于什么是错的以及我应该使用什么字符的建议吗?

4

2 回答 2

1

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

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

当您使用 jQuery 时,它甚至会自动为您解析 json .data()

$("#hello").data("json").TYPE; //3

http://jsfiddle.net/jJQ7z/

于 2012-12-12T12:13:38.310 回答
0

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

如果您需要在标签中包含补充数据,您可以创建以 . 开头的自定义标签data-。您可以将您想要的任何信息放入您想要的任意数量的此类标签中,并且它仍然是完全有效的 HTML。例如:

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

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

于 2012-12-12T12:10:02.307 回答