有没有办法将转义码转换回它们在javascript中表示的字符?我正在将列表传递给javascript文件,当我查看源代码时,而不是这个
['/path/to/job/a', '/path/to/job/b', etc]
我看到这个
['/path/to/job/a', '/path/to/job/b', etc]
我需要实际的单引号本身来进行 jquery 自动完成调用,那么有没有办法转换回来?我正在将列表从python/flask后端传递给javascript。
return render_template('main_page.html', job_names = id_by_job.keys())
所以在javascript文件中,我正在做类似的事情
$("#job_names").autocomplete({source : {{job_names}}});
插入到模板中的值始终被转义,以便安全包含;这包括用 HTML 实体替换引号。
您希望在此处将列表转换为 JSON,而不是使用 tojson
筛选器,并将结果标记为安全:
$("#job_names").autocomplete({source : {{ job_names|tojson_safe }}});
JSON 是 JavaScript 的一个子集;结果可以直接作为 JavaScript 读取,保证正确转义。
一个巧妙的技巧是使用临时选项:
var o=new Option();
o.innerHTML="'/path/to/job/a', '/path/to/job/b', etc"
alert(o.innerHTML); // shows: "'/path/to/job/a', '/path/to/job/b', etc"
您还可以使用正则表达式替换与函数回调:
"'/path/to/job/a', '/path/to/job/b', etc".replace(/&#(d+);/g,
function(j,a){
return String.fromCharCode(a)
}); // == "'/path/to/job/a', '/path/to/job/b', etc"
编辑:我意识到您可能想要处理数组,并且 [].map() 可以轻松地将上述内容应用于数组:
['/path/to/job/a', '/path/to/job/b']
.map(function(a){ return a.replace(/&#(d+);/g, function(j,a){
return String.fromCharCode(a)
});
}); // == ["/path/to/job/a", "/path/to/job/b"]