2016-06-28 10 views
0

私はD3ライブラリを使用しています。プログラムIDで要素を選択したいのですが、そのIDにカンマが含まれています。私はデータの一部としてIDを読み込んでいるので、それを制御することはできません。文字列内のすべての特殊文字をエスケープするには?

私のコードは次のとおりです。

vは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; }) 
}); 

特に、私が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(2017年5月のなどの実験):

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$&'));

関連する問題