2016-06-28 79 views
0

我正在使用D3庫。我想以編程方式選擇一個元素的ID,但該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。

+0

var x = encodeURIComponent(「#B_ne_,3」); d3.select(x); –

+0

[* cssesc *](https://github.com/mathiasbynens/cssesc)庫應該能夠完成這項工作。它附帶了[CSS字符轉義序列]的深入解釋(https://mathiasbynens.be/notes/css-escapes)。 – altocumulus

回答

1

使用CSS.escape(實驗截至5月2017):

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

有舊的瀏覽器準確polyfills,但是如果你逃不必要的字符很簡單:

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

相關問題