【问题标题】:d3.js: how to traverse back up the DOMd3.js:如何遍历备份 DOM
【发布时间】:2011-12-02 02:09:41
【问题描述】:

我不太确定 javascript、DOM 或 d3.js 的哪些方面,这暴露了我缺乏知识:只知道我很抱歉提出以下这样一个基本问题。我是新来的。

我有一个这样的 json:

[{"link":"a", "count": 3}, {"link":"b", "count": 4}, {"link":"c", "count": 2}]

我想做一些看起来像

的东西
<ul>
    <li> <a>a</a> (3)</li>
    <li> <a>b</a> (4)</li>
    <li> <a>c</a> (2)</li>
</ul>

使用 d3.js(为了解决显而易见的问题:我想用 d3 做更多事情,这只是解决了我遇到的问题)。

在我的 html 中弹出 &lt;ul&gt; 标记后,在来自 d3.json 的回调中某处我可以写如下内容:

d3.select("ul")
    .selectAll("li")
    .data(json)
    .enter()
    .append("li")
    .append("a")
    .text(function(d){return d.link})

(虽然这是未经测试的!javascript 的人如何测试一小段代码?)。这将(可能)给我

<ul>
    <li><a>a</a></li>
    <li><a>b</a></li>
    <li><a>c</a></li>
</ul>

但现在我无法摆脱&lt;a&gt; 标签!我无法弄清楚this 和选择父母或其他什么不合情理的组合,我需要在列表项标签关闭之前添加额外的信息。我需要做什么?

【问题讨论】:

  • “javascript 的人如何测试一小段代码?” - jsfiddle.net
  • 恐怕我不知道 d3 语法,但你能不能在附加 'a' 之前简单地在 'li' 元素中输出 d.count ?从而规避向上遍历的需要?
  • @dougajmcdonald 不会把 d.count 放在链接前面而不是后面吗?
  • @James Allardice 谢谢!

标签: javascript json dom d3.js


【解决方案1】:

简单:不要过度使用方法链接。 :)

var ul = d3.select("ul");

var li = ul.selectAll("li")
    .data(json)
  .enter().append("li");

var a = li.append("a")
    .text(function(d) { return d.link; });

现在您可以向 li 添加其他内容。在这种情况下,由于 D3 只允许您添加元素(而不是原始文本节点),您可能希望为括号文本添加一个跨度:

li.append("span")
    .text(function(d) { return " (" + d.count + ")"; });

【讨论】:

  • 非常感谢!出于某种原因,我不太确定我是否会不惜一切代价避免变量。将停止这样做。
猜你喜欢
  • 2013-09-12
  • 1970-01-01
  • 1970-01-01
  • 2019-08-08
  • 2016-09-23
  • 2011-12-19
  • 2011-09-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多