【问题标题】:Use special characters in jQuery plugin setting?在 jQuery 插件设置中使用特殊字符?
【发布时间】:2014-05-07 23:00:33
【问题描述】:

我正在使用的插件遇到问题。我允许用户像这样将一些文本传递给插件:

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 元素上的单引号都是有效的。

谢谢!

【问题讨论】:

  • 我需要知道如何保存和写入数据以获得完整的答案,但这会有所帮助:stackoverflow.com/a/1219983/1173601
  • 我假设 data-plugin='{ "setting" : "hello world" }' 是一个 HTML 属性?
  • 是的,它是一个 HTML 属性
  • 在生成 HTML 之前,您必须正确地对所有 ' 进行 HTML 编码。见jsfiddle.net/t9qv4
  • 没有生成 html - 但将由用户输入以进行插件设置。

标签: javascript jquery string encode


【解决方案1】:
data-plugin='{ "setting" : "hello world, it's been awhile." }'

由于您使用撇号包装 JSON 字符串,因此您需要在字符串中转义撇号。

改成:

data-plugin='{ "setting" : "hello world, it\'s been awhile." }'

编辑:好的,基于 data-plugin 是 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'));

它会导致您在问题中提到的错误。

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

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

我得到了正确的回应。这会提醒一个 JSON 对象,所以

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

警报“1_foreground.png”。如果您想要将其转回 JSON,您需要:

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

【讨论】:

  • 这是我尝试的第一件事,奇怪的是它不起作用?
  • 一旦撇号被转义,它就是一个声音字符串,例如:alert('te'st');与警报('te\'st'); ...只是为了确认,您没有收到任何控制台错误?如果没有,那么我需要查看更多代码来诊断插件中发生的事情,以及更多关于您遇到的问题的描述。您是否尝试创建一个 JSON 对象,但它是未定义的?如果您在 data-plugin 行之前和之后放置警报会发生什么?
  • 嘿 Gary,刚刚添加到问题中,以便您可以在上下文中查看它。我很确定像往常一样逃避它会成功,但没有运气 - 也没有控制台错误。我会尝试提醒。
  • 不能在主要问题上输入这个,因为我没有 50 个代表,但我错过了部分原始问题,用户将输入这个。我同意 James L.我们需要更多关于数据来自何处以及如何进入您正在使用的 JSON 字符串的信息。
  • 是的,这是“用户”在表单字段中输入数据还是“开发人员”向元素添加数据属性?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-13
  • 2014-11-17
  • 2014-06-29
  • 2013-06-04
  • 2023-03-10
  • 1970-01-01
相关资源
最近更新 更多