如果对象内容是用户生成的,如何正确转义对象的JSON字符串?

我想将var s用作选项元素的value-field。在包含用于键和值的用户输入的意义上,如何正确地转义?

var key='highway'; var value='track';
var s = JSON.stringfy({ [key]:value },undefined,'');
s = s.replace(/'/g,'\\\'').replace(/"/g,'\\"');
var h = '<option type="text" value="' + s + '">'+key+'</option>';
// ...
document.getElementById('aSelectElement').innerHTML = h;

编辑:实际上,我将其用于选项元素而不是首先提到的输入元素。

如果我在浏览器中选择结果,然后让我显示生成的html,则显示如下内容:

<option value="{\" highway\":\"track\"}"="">highway track</option>

哪个添加了一个问题,为什么高速公路前面有空白?

duracraft 回答:如果对象内容是用户生成的,如何正确转义对象的JSON字符串?

我也建议使用DOM元素,而不是像其他答案中那样将HTML构建为字符串。但是,如果您真的不想这样做,则可以将JSON中的任何双引号转换为HTML实体&quot;,这样它们就不会终止value属性。

var key = 'first';
var value = 'test';
var s = JSON.stringify({
  [key]: value
},undefined,'').replace(/"/g,'&quot;');
var h = '<input type="text" value="' + s + '">';
document.getElementById('aDiv').innerHTML = h;
<div id="aDiv"></div>

,

无需将HTML构建为字符串。您可以创建输入元素并以编程方式设置其值:

// ...
var inputElem = document.createElement('input');
inputElem.type = 'text';
inputElem.value = s;
// ..
document.getElementById('aDiv').appendChild(inputElem);

请注意,这并不完全相同,因为设置innerHTML会从div中删除所有现有内容,但调用appendChild不会。如果确实需要替换现有内容,则可以先通过removing the existing child nodes进行。

本文链接:https://www.f2er.com/3162916.html

大家都在问