如何转义字符串中的所有特殊字符?

时间:2016-06-28 21:58:32

标签: javascript d3.js

我正在使用D3库。我想以编程方式按编号选择元素,但该ID包含逗号。我正在读取ID作为数据的一部分,所以我无法控制它。

我的代码是:

g.nodes().forEach(function(v) {
   d3.select('#'+v+)
   .attr("cx", function(){return g.node(v).x; })
   .attr("cy", function(){return g.node(v).y; })
});

其中v是与ID匹配的字符串。

具体来说,当我尝试d3.select("#B_ne_,3")时,我得到d3.js:562 Uncaught DOMException: Failed to execute 'querySelector' on 'Document': '#B_ne_,3' is not a valid selector.(…)

我知道我可以使用"#B_ne_\\,3"选择它,但我怎么能逃避这些字符?

我不使用jquery。

1 个答案:

答案 0 :(得分:1)

使用CSS.escape(截至2017年5月的实验):

var v = "B_ne_,3";
console.log("#" + CSS.escape(v));

旧浏览器有精确的polyfill,但如果你逃避不必要的字符,它会更简单:

var v = "B_ne_,3";
console.log("#" + v.replace(/\W/g, '\\$&').replace(/^\d/, '\\00003$&'));