微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

每当我使用“省略号”进行文本换行时,是否会出现随机字符? 这是字符集问题吗?

如何解决每当我使用“省略号”进行文本换行时,是否会出现随机字符? 这是字符集问题吗?

我正在尝试换行并在我的 Cytoscape 图形标签上放置一段长度后的“...”。我有这个代码

style: [{
  selector: 'node',css: {
    'label': 'data(id)','text-wrap': 'ellipsis','text-max-width': 10,'text-justification': 'left','font-family': 'serif','color': 'red'
  }
}]

但是,当我这样做时,会出现随机字符而不是原始文本。 Stack Overflow 上有一个类似的问题:text-overflow: ellipsis is displaying different character

在这里,接受的答案告诉我们字符集必须是 utf-8,并且字体应该受 U+2026 支持

因此我把这个标签放在我的 HTML 中:

<Meta charset="UTF-8">

而且我的字体家族是serif,所以不知道有什么办法可以解决问题。 PS:这是说明如何使用 Cytoscape 文本换行的文档:https://js.cytoscape.org/#style/labels 而且我能够使用 wrap 选项而不是 ellipsis 来换行文本,因此我不认为代码结构错误

解决方法

您可以通过使用函数来计算标签来防止这种情况发生。在 cytoscape.js 样式表中,您可以执行以下操作:

style: [
    {
      selector: "node",css: {
        'label': function(node) {
            if (node.data("name").length > 20) {  
                return `${node.data("name").substring(0,20)}...`;
            else {
                return ${node.data("name");
            }
        },height: "60px",width: "60px"
      }
    },...

在代码片段中,我使用了省略号属性并且没有错误:

var cy = (window.cy = cytoscape({
  container: document.getElementById("cy"),boxSelectionEnabled: false,autounselectify: true,style: [{
      selector: "node",css: {
        content: "data(name)",{
      selector: "edge",css: {
        "target-arrow-shape": "triangle"
      }
    },{
      selector: ".multiline-manual",style: {
        "text-wrap": "wrap"
      }
    },{
      selector: ".multiline-auto",style: {
        "text-wrap": "ellipsis","text-max-width": 120
      }
    }
  ],elements: {
    nodes: [{
        data: {
          id: "n0",name: "This is a very long name and all I have to do is to add a class!"
        },classes: "multiline-auto"
      },{
        data: {
          id: "n1",name: "Shorter Text----------"
        },{
        data: {
          id: "n2",name: "This shouldn't wrap"
        },classes: "multiline-manual"
      },{
        data: {
          id: "n3",name: "This should\nwrap"
        },classes: "multiline-manual"
      }
    ],edges: [{
        data: {
          source: "n0",target: "n1"
        }
      },{
        data: {
          source: "n1",target: "n2"
        }
      },target: "n3"
        }
      }
    ]
  },layout: {
    name: "dagre",padding: 5
  }
}));

console.log(cy.nodes())
body {
  font: 14px helvetica neue,helvetica,arial,sans-serif;
}

#cy {
  height: 100%;
  width: 100%;
  left: 0;
  top: 0;
  float: left;
  position: absolute;
}
<html>

<head>
  <meta charset=utf-8 />
  <meta name="viewport" content="user-scalable=no,initial-scale=1.0,minimum-scale=1.0,maximum-scale=1.0,minimal-ui">
  <script src="https://unpkg.com/cytoscape@3.3.0/dist/cytoscape.min.js">
  </script>
  <script src="https://unpkg.com/jquery@3.3.1/dist/jquery.js"></script>
  <!-- cyposcape dagre -->
  <script src="https://unpkg.com/dagre@0.7.4/dist/dagre.js"></script>
  <script src="https://cdn.rawgit.com/cytoscape/cytoscape.js-dagre/1.5.0/cytoscape-dagre.js"></script>
</head>

<body>
  <div id="cy"></div>
</body>

</html>

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。