d3.js を使用して、CodeMirror でマークされたテキストを操作したいと考えています。ただし、CodeMirror でテキストをマークするには、 を呼び出しmarkText(from,to, {class: 'my-class'})
て、クラスでテキストの周りにスパンを作成しますmy-class
。
データに基づいて多くのテキストをマークし、イベント処理などを追加したいと考えています。したがって、私は次のようなことをしたいと思います:
var box = d3.selectAll('box').data(myData);
box.enter().each(function(d) {cm.markText(from(d), to(d), {class: 'box'});})
box.on('mouseover', function(d) {...});
box.exit().remove();
ただし、d3 の入力選択はappend
、insert
、およびのみをサポートしselect
ます。select
私はすでに(例えば)で効果を偽造しようとしましbox.enter().select(arbitraryElt).each(...)
たが、うまくいきませんでした。
もちろん、データをループしてテキストをマークし、d3 を使用して必要な他の属性を適用することもできますが、それでは d3 を使用する意味がなくなります。
エレガントな方法でd3でこれを行うことは可能ですか?
編集:
markText の仕組みを完全に誤解しているため、質問のコンテキストが無効であることに気付きました。ただし、追加の代わりに任意の関数を使用して要素を作成できるかどうかはまだ興味があります。