繁体   English   中英

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

[英]select nodes whose attribute (array-type) contains a certain value with cytoscape.js

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

{"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 ......

提前谢谢了

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM