在javascript中对列表进行编码

时间:2014-03-05 21:31:58

标签: javascript python list flask escaping

有没有办法将转义代码转换回它们在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}}});

2 个答案:

答案 0 :(得分:0)

插入到模板中的值总是被转义以便安全包含;其中包括用HTML实体替换引号。

您希望在此处使用tojson filter将列表转换为JSON,并将结果标记为安全:

$("#job_names").autocomplete({source : {{ job_names|tojson_safe }}});

JSON是JavaScript的一个子集;结果可以直接读取为JavaScript,保证可以正确转义。

答案 1 :(得分:-2)

一个巧妙的技巧是使用临时选项:

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"

你也可以使用RegExp替换函数回调:

"'/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"]