我想使用 d3.js 与 CodeMirror 中的标记文本进行交互。但是,要在 CodeMirror 中标记文本,您需要调用markText(from,to, {class: 'my-class'})
它并使用 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 的工作原理,因此我的问题的上下文是无效的。但是,我仍然很好奇是否可以使用任意函数而不是 append 创建元素。