我想使用d3.js與CodeMirror中的標記文本進行交互。但是,要在CodeMirror中標記文本,請致電markText(from,to, {class: 'my-class'})
,並在類別my-class
的文本上創建一個範圍。使用自定義函數在d3.js中創建元素
我希望根據數據標記許多文本,然後添加一些事件處理等。因此,我想這樣做:
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是如何工作的,因此我的問題的情況下是無效的。但是,我仍然很好奇,如果可以使用任意函數而不是附加來創建元素。