如何使用qtip循环JSON节点数据并仅展示存在的字段?
解决qtip展示JSON节点时出现undefined字段的问题
我来帮你搞定这个问题!你现在遇到的情况是因为部分节点数据里没有type或者description属性,直接调用this.data('xxx')时会返回undefined,拼接到字符串里就显示出来了。咱们只需要在生成提示内容时,先判断字段是否存在,只把有值的字段加进去就行,同时还要先修正你JSON数据里的语法错误哦。
第一步:修正JSON数据的语法问题
你提供的节点JSON里有两处缺少逗号、一处多余逗号的错误,这会导致数据解析异常,先改过来:
elements: { "nodes": [ { "data": { "id": "a2345", "name" : "b1234", // 补充缺失的逗号 "type": "test" // 移除末尾多余的逗号 } }, { "data": { "id": "a212", "name" : "c34", // 补充缺失的逗号 "description": "hellooo" // 移除末尾多余的逗号 } } ] }
第二步:修改qtip的content函数,过滤undefined字段
把原来的content函数改成下面这样,它会只收集节点数据中存在的字段,再拼接成干净的提示内容:
cy.nodes().qtip({ content: function(){ // 获取当前节点的完整数据对象 const nodeData = this.data(); // 用来收集需要展示的有效字段文本 const displayParts = []; // 逐个判断字段是否存在有效值,存在则加入列表 if (nodeData.id) displayParts.push(`id: ${nodeData.id}`); if (nodeData.name) displayParts.push(`name: ${nodeData.name}`); if (nodeData.type) displayParts.push(`type: ${nodeData.type}`); if (nodeData.description) displayParts.push(`description: ${nodeData.description}`); // 生成节点编号(用节点在集合中的索引+1,对应你期望的node1、node2格式) const nodeNum = cy.nodes().index(this) + 1; // 拼接成最终的提示文本 return `node${nodeNum} - ${displayParts.join(', ')}`; } });
为什么这样可行?
- 通过
this.data()获取节点完整数据,逐个检查字段是否有值,不存在的字段会被自动跳过 - 用数组收集有效字段文本,最后用
,连接,避免了手动拼接时出现的多余逗号或undefined - 借助
cy.nodes().index(this) + 1生成连续的节点编号,完全匹配你想要的输出格式
这样修改后,提示内容就只会显示节点实际存在的字段,不会再出现undefined啦!
内容的提问来源于stack exchange,提问作者Averill
相关产品推荐
相关产品推荐

