使用cytoscape.js选择其属性(数组类型)包含特定值的节点

时间:2014-08-04 17:47:13

标签: javascript cytoscape.js

我目前正在可视化网络,其中节点具有list类型的属性,例如:

{"data": {"name": "b", "go": ["c", "d", "f"], "id": "n0"}, "group": "nodes"},
{"data": {"name": "a", "go": ["a", "b", "c"], "id": "n1"}, "group": "nodes"},
{"data": {"target": "n0", "source": "n1", "id": "e1"}, "group": "edges"}

是否可以使用cytoscape.js选择list-attribute(示例中的'go')包含特定值的所有节点?

类似的东西:

cy.elements('node[go.contains("b")]')

将选择节点n1 ...

非常感谢提前

1 个答案:

答案 0 :(得分:4)

替代方法:如果您不需要使用选择器,则可以使用过滤器函数并将属性保持为数组:cy.elements().filter(function(){ return this.data('go').indexOf('foo') >= 0; })

包含check的数组在选择器中可能很昂贵,因为它们最常用在样式表中 - 只要状态发生变化就需要应用它们。目前,您无法使用现有选择器和当前数据结构进行建议。

您可能会发现使用对象而不是数组更容易。对象可以是简单的名称:go: { foo: true, bar: true }之类的真对。由于undefined是假的,您只需要在数组中定义正例。

这样,您可以使用简单的选择器,如node[go\\.foo](或node[?go\\.foo],如果您想要更明确一些)。在您自己的代码中进行检查也更简单,更便宜(例如node.data('go.foo') ? 'has it' : 'does not')。