我正在尝试使用hopscotch.js创建交互式旅游。JavaScript库要求旅游的标准数据结构如下:
// 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开发者工具查看页面时,会出现以下错误:
语法错误,无法识别的表达式:document.querySelector(“。btn-primary”)
通过探索返回到页面的JSON数据,我可以看到围绕我的 document.querySelector()
的双引号正在引起问题。当我通过
document.querySelector()
指定 target
时,需要将这些双引号从 target
中删除,但是当我基于HTML标记(例如 header
)指定 target 时,双引号应保留。
有什么想法如何实现这一点吗?
document.querySelector()
的结果作为 target 的值传递,这真的是你想要的吗? - DavidGquerySelector
的参数只需要由JS解释,对于C#而言,它只是字符串的一部分;因此,服务器端语法没有问题。但是,您需要在JS端检测到字符串化的函数调用(很容易),并执行(仍然很容易,但这涉及到我所知道的不鼓励使用eval
)。 - collapsarquerySelector
的参数是一个字符串...而且document.querySelector()
本身也是一个字符串。这是因为我在MockTourSteps
模型中的Target
属性是字符串类型。我需要保持这个字段的灵活性,以便我可以将诸如“footer”之类的字符串传递到target
字段中,供 hopscotch.js 使用。 - Stu1986Ceval
。 - collapsar