在javascript中取消编码列表



有没有办法将转义码转换回它们在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"]

最新更新