2017-08-11 41 views
1

只有在此table尚不存在的情况下,我如何在tableD3.js之间追加table使用D3.js创建独特的DOM元素并更新它们,但不会再追加它们

E.g.我想附加几个表到DIV,所以如果tableid='table1'已被追加,如果它再次出现在我的列表更新,我希望它被更新,但不会再次作为第二个table附加。

我要做迄今:

var tableDiv = d3.select('#tablesContainer').append('table').attr('id', 'table1');

然而,在情况下,我尝试添加第二台具有相同idid=table1,它会创建一个新的DOM元素与相同id

任何帮助是非常apreciated。

+0

你添加表格以回应数据?你的data()和enter()函数在哪里? –

+0

是的,这正是我所做的:添加表如果它们不存在或更新它们,如果它们存在。我实际上使用[这个例子]中的'tabulate'函数(http://bl.ocks.org/jfreels/6734025)。 – luthien

回答

-1

已更新现有的DOM元素,你要选择,然后操纵它们像这样:

var table = d3.select('#tablesContainer').select('#table1');

,做一些表,例如

table.style("backgroundColor", "grey");

您使用的是append,在那里你应该使用select

如果您是基于数据创建表计划,使用update Selection

var tables = d3.select('#tablesContainer').data(data).style("backgroundColor", "grey");

输入和更新在两行代码:

d3.select('#tablesContainer').data(data); tables.enter().append("table").merge(tables).style("backgroundColor", "grey");

+0

非常感谢您的回答!我确实想更新现有的DOM元素,但我也想先创建它们。所以每次我收到一个事件时,如果表没有退出,那么它就会被创建,否则它会被更新。 我不知道是否有一种方法可以在一行代码中执行,而不用检查“IF”是否为空。 – luthien

+0

相应地更新了我的答案,并且我还推荐了关于d3选择的本教程:https://bost.ocks.org/mike/circles/ – nick

+0

那么,merge(tables)函数并不是我想要的。我只想更新同一个表内的数据,而不是将它与其更新版本合并。不管怎么说,还是要谢谢你 – luthien

相关问题