根据元素的文本内容进行过滤

时间:2014-04-21 20:56:17

标签: javascript d3.js

我是d3的新手,我正在尝试调整Mike Bostock的Treemap示例(http://bl.ocks.org/mbostock/4063582)。以下是我想要实现的目标:

1)通过提交按钮从用户处获取文本输入;

2)找到包含文本输入的节点(来自树);

3)更改这些节点的背景属性。

为了使我的问题更简单,有没有办法根据元素的文本内容过滤(子集)元素?

例如,如果我有以下四个p元素,我可以执行类似下面的操作将Cathy更改为红色吗?

d3.selectAll("p")
    .filter(function(d) { return d.text === Cathy; })
    .attr("color", "red");

<p>Alice</p>
<p>Ben</p>
<p>Cathy</p>
<p>Daniel</p>

任何意见将不胜感激。

1 个答案:

答案 0 :(得分:2)

如果现有元素已经有绑定到它们的数据,包括用于设置文本的“text”元素,那么您的示例代码将立即起作用(除了引用字符串“Cathy”)。

如果没有,您只需进行一些小修改 - 如果元素的实际文本内容未存储在数据中,您将需要使用this来获取它:

d3.selectAll("p")
    .filter(function(d) { return d3.select(this).text() === "Cathy"; })
    .attr("color", "red");