在jQuery插件设置中使用特殊字符

Use special characters in jQuery plugin setting?

本文关键字:特殊字符 设置 jQuery 插件      更新时间:2023-09-26

我正在开发的插件遇到了问题。我允许用户向插件传递一些文本,如下所示:

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属性:

我尝试了一个JSFIDDLE来复制,下面是我得到的:

<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"
}'>

和javascript

alert($('input').data('plugin'));

它会导致你在问题中注意到的错误。

根据对您问题的第一条评论,我将撇号转义为&apos;,当我运行时

alert($('input').data('plugin'));

我得到了恰当的回应。这将向JSON对象发出警报,因此

alert($('input').data('plugin').foreground);

alerts"1_foreground.png"。要将其转换回JSON,如果您正试图这样做,则需要:

var jsonPluginSettings = JSON.stringify($('input').data('plugin'));