【发布时间】:2015-07-15 00:48:35
【问题描述】:
我正在尝试使用 hopscotch.js 创建一个交互式游览。 JavaScript 库需要 tour 才能工作的标准数据结构如下:
// Define the tour!
var tour = {
id: "hello-hopscotch",
steps: [
{
title: "My Header",
content: "This is the header of my page.",
target: "header",
placement: "right"
},
{
title: "My content",
content: "Here is where I put my content.",
target: document.querySelector("#content p"),
placement: "bottom"
}
]
};
将游览步骤直接放入 JavaScript 库效果很好,但理想情况下,我希望能够将所有这些详细信息保存在数据库中,并使用 AJAX 将数据传递给 hopscotch.js。 (这样可以动态创建游览,并且可以在不发布代码的情况下更改content)。
除了我的target 使用document.querySelector() 元素选择器之外,一切都运行良好。
我的每个游览步骤的基本 C# 模型如下:
public class MockTourSteps
{
public string Title { get; set; }
public string Content { get; set; }
public string Target { get; set; }
public string Placement { get; set; }
}
由于Target 是一个字符串,我必须用双引号传递值。
这样做的问题是,当它被序列化为 JSON 时,使用 Chrome 开发者工具查看页面时会出现以下错误:
Syntax error, unrecognized expression: document.querySelector(".btn-primary")
浏览已返回页面的 JSON 数据,我可以看到我的 document.querySelector() 周围的双引号导致了问题。
当我通过document.querySelector() 指定target 时,我需要从target 中删除这些双引号,但是当我基于HTML 标签指定target 时,双引号将保留,例如作为header。
有什么想法可以实现这一点吗?
【问题讨论】:
-
您是否尝试过使用 JSON.stringify 将 javascript 值转换为 json 字符串? developer.mozilla.org/en/docs/Web/JavaScript/Reference/…
-
在上面的那个 JavaScript 中,你实际上是在传递
document.querySelector()的结果作为目标的值,这真的是你想要的吗? -
如果可能,我想用我的 C# 处理服务器端的双引号。 @DavidG - 是的,我希望能够将
document.querySelector()作为值传递(当然要在括号内选择元素:-))。 @collapsar - 不幸的是,在 C# 中,所有字符串都需要在双引号内定义。问题是这些 C# 双引号在到达客户端 JavaScript 时会给我带来问题。 -
@Stu1986C 我不确定你是否明白我的意思。您的 Javascript 传递一个 HTML 元素(在本例中为
p标记)而不是字符串document.querySelector(...)。这就是你想要的吗? -
@Stu1986C 我摸了摸,看不出有什么可以替代使用 javascript
eval。
标签: javascript c# jquery json hopscotch