Javascript 在jQuery插件设置中使用特殊字符?
我正在开发的插件遇到了问题。我允许用户向插件传递一些文本,如下所示:Javascript 在jQuery插件设置中使用特殊字符?,javascript,jquery,string,encode,Javascript,Jquery,String,Encode,我正在开发的插件遇到了问题。我允许用户向插件传递一些文本,如下所示: data-plugin='{ "setting" : "hello world" }' 没有问题,除非引入特殊字符: data-plugin='{ "setting" : "hello world, it's been awhile." }' 撇号只是暂停所有操作,不抛出任何错误。我不确定我将如何允许用户像通常那样键入这些内容 编辑:以下是导致问题的确切属性: data-plugin='{ "foreground":
data-plugin='{ "setting" : "hello world" }'
没有问题,除非引入特殊字符:
data-plugin='{ "setting" : "hello world, it's been awhile." }'
撇号只是暂停所有操作,不抛出任何错误。我不确定我将如何允许用户像通常那样键入这些内容
编辑:以下是导致问题的确切属性:
data-plugin='{
"foreground":"1_foreground.png",
"horizon":"50,120",
"subtitle":"Hello world. It's been awhile.",
"subtitle_speed":"3500,2000",
"subtitle_color":"#ff5b00",
"subtitle_pos":"bottom"
}'
编辑2:
当设置中使用\'时,在合并插件内的对象之前会记录此设置:
{
"foreground":"1_foreground.png",
"horizon":"50,120",
"subtitle":"Hello world. \
在这之后,我直接使用$.extend将其合并,然后将其作为数据应用
这是如何设置的:
在大量元素上调用插件:
$('.el').plugin({ "setting1" : "value" });
通过在此处使用这些设置来修改这些设置:
<div class="el"></div>
<div class="el" data-plugin='{ "setting1" : "special value" }'></div>
无论如何,这不是问题所在。问题是试图在值中插入撇号。任何HTML元素上的单引号都是有效的
谢谢
data-plugin='{ "setting" : "hello world, it's been awhile." }'
因为要用撇号包装JSON字符串,所以需要在字符串中转义撇号
将其更改为:
data-plugin='{ "setting" : "hello world, it\'s been awhile." }'
编辑:好的,我想我知道你在做什么,因为数据插件是一个html属性:
我尝试了一个JSFIDLE来复制,下面是我得到的结果:
<input type='hidden' data-plugin='{
"foreground":"1_foreground.png",
"horizon":"50,120",
"subtitle":"Hello world. It\'s been awhile.",
"subtitle_speed":"3500,2000",
"subtitle_color":"#ff5b00",
"subtitle_pos":"bottom"
}'>
这导致了你在问题中提到的错误
根据对您问题的第一次评论,我将撇号改为&apos代码>当我运行时
alert($('input').data('plugin'));
我得到了正确的回答。这将向JSON对象发出警报,因此
alert($('input').data('plugin').foreground);
警报“1_foreground.png”。要将其转换回JSON(如果您正试图这样做),您需要:
var jsonPluginSettings = JSON.stringify($('input').data('plugin'));
我需要知道数据是如何保存和写入的,以获得完整的答案,但这会有所帮助:我假设数据插件='{“设置”:“hello world”}
是一个HTML属性?是的,它是一个HTML属性在生成HTML之前,您必须正确地对所有'
进行HTML编码。请参阅。html没有生成,但用户会输入以进行插件设置。这是我尝试的第一件事,奇怪的是它没有工作?一旦撇号被转义,它就是一个声音字符串,例如:alert('te'st');vs.alert('te'st')。。。只是确认一下,您没有收到任何控制台错误?如果没有,那么我需要看到更多的代码来诊断插件中发生了什么,以及更多关于发生了什么问题的描述。您是否正在尝试创建一个JSON对象,但它尚未定义?如果在数据插件行之前和之后都添加了一个警报,会发生什么?嘿,Gary,刚刚添加到问题中,以便您可以在上下文中看到它。我很确定,像往常一样逃避它会奏效,但没有运气,也没有控制台错误。我将尝试提醒。无法在主问题上键入此内容,因为我没有50个代表,但我错过了原始问题的一部分,用户将键入此内容。我同意James L的观点。我们需要更多关于数据来自何处以及如何进入您正在使用的JSON字符串的信息。是的,这是“用户”将数据输入表单字段还是“开发人员”将数据属性添加到元素?
var jsonPluginSettings = JSON.stringify($('input').data('plugin'));