Javascript JSON.parse 字符串 onclick 内联
Posted
技术标签:
【中文标题】Javascript JSON.parse 字符串 onclick 内联【英文标题】:Javascript JSON.parse string onclick in-line 【发布时间】:2018-11-18 02:13:32 【问题描述】:我正在使用 jquery 将 html 附加到 ID;具体来说,我无法将 JSON 格式的字符串放入元素的 onclick 参数中。我故意希望在单击时解析 JSON,并且对于此特定工作中存在于 DOM 中的 JSON 完全可以接受。
我认为问题与正确转义引号有关(因为 Chrome Inspect Elements 调试显示每个 JSON 元素都被视为 HTML 标记而不是字符串 - 请参阅 https://ibb.co/eHOgq8 以获取有关 DOM 的屏幕截图正在解释中)
var str = '"artist":"So and So","title":"Not Relevant"';
$("#d").append('<ul><li><a onclick="JSON.parse(\'' + str + '\')" title="NA">Link</a></li></ul>')
我尝试过使用多种转义机制和引号类型以及一些本机 javascript 转义,但没有得到任何结果。 2小时后,我不得不求助。非常感谢您。
【问题讨论】:
您真正想通过将 JSON 放入 onClick 来实现什么?现在我没有任何意义。 【参考方案1】:试试这个:
var str = '"artist":"So and So","title":"Not Relevant"';
var jsonObj = JSON.parse(str);
$("#d").append('<ul><li><a onclick="alert(JSON.stringify(jsonObj))" title="NA">Link</a></li></ul>');
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="d"></div>
【讨论】:
非常感谢您对我有/有的问题的迟到但直接的回答。非常感谢!【参考方案2】:不要尝试分配具有内联属性的处理程序 - 这与 eval
一样糟糕,并且正如您所遇到的那样,可能会导致转义字符出现令人困惑的问题。相反,请使用 Javascript 正确附加处理程序,例如:
var str = '"artist":"So and So","title":"Not Relevant"';
$('#div').append('<ul><li><a title="etc">link</a></li></ul>');
$('div a').on('click', () => console.log(JSON.parse(str)));
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="div"></div>
【讨论】:
感谢您的快速回复!也许我没有提供足够的背景来解决我的真正问题。以上将起作用,但是当我编写更新的 HTML 时,我正处于循环的中间,因此每个click
事件都需要针对一个唯一的 div。此外,我已经可以让它以正确的格式登录到控制台,但是当注入到 DOM 中时,它开始认为 json 键/值对实际上是 HTML 元素(我太早捕捉到 onClick
的结束引号思考)。真实代码见ibb.co/kv9PtT。 JSON 是可信的(用户不能更改/注入)。希望你能帮忙!
这只是一个示例 - 如果您有多个 a
s,那么您当然必须使选择器更具体,例如定位最后一个 a
或为a
之前的 append
ing 它。如果代码与您的问题相关,请将其发布在您的问题中(请参阅如何提问页面)以上是关于Javascript JSON.parse 字符串 onclick 内联的主要内容,如果未能解决你的问题,请参考以下文章
从一个 JSON.parse 错误深入研究 JavaScript 的转义字符
JavaScript JSON.parse()和JSON.stringify()
JSON.parse() 在 pentaho 的 javascript 中不起作用