我在Reaction中有一个显示文本的组件.如果文本太长,我会将其截断为两行.我完全依赖于css来做到这一点.还有另一个按钮用于切换截断.以下是组件:

const [showFull, toggleShowFull] = useReducer((s) => !s, false);

const TruncatableText = styled("p", {
  display: "-webkit-box",
  WebkitBoxOrient: "vertical",
  WebkitLineClamp: 2,
  lineHeight: 1.5,
  maxHeight: "3em",
  overflow: "hidden",
  textOverflow: "ellipsis",
  cursor: "pointer",
  width: "100%",

  variants: {
    showFull: {
      true: {
        WebkitLineClamp: 1000,
        maxHeight: "100%",
      },
    },
  },
});

return (
  <>
    <TruncatableText showFull={showFull}>
      {text}
    </TruncatableText>

    <Button onClick={toggleShowFull}>
      {showFull ? "Hide Full Text" : "Show Full Text"}
    </Button>
  </>
)

以下是文本被截断的时间预览:

Truncated Version

下面是文本展开时的预览:

Expanded Version

现在,如果且仅当文本被截断时,我才要显示该按钮.

我想到了一个 idea ,我可以以某种方式获得显示在p标签上的字符数.我try 获取p标记的内部文本,但它给了我整个文本,即使它被截断了.有没有人可以帮助我,我怎样才能得到p个标签上可见的字符数?

或者有没有其他方法来做我想做的事?

推荐答案

截断文本时,innerHTML保持不变

它将始终是全文,因为截断发生在css级别(即当它被显示时).

You should approach it by measuring the height of the TruncatableText component

找出这对于截断文本是什么,然后如果它比这更长,你就知道你是扩展的.

当然,这本身不会帮助您了解文本是否太短,以至于高度在限制范围内.这是一个更复杂的问题,需要回答.

Javascript相关问答推荐

可以将SuperTest导入为ES 6模块吗?

使用ReactJS对Ant Design表中的空值进行排序

通过实现regex逻辑自定义数据表搜索

可以的.是否可以在不预编译的情况下使用嵌套 Select 器?

如何在JavaScript中在文本内容中添加新行

硬币兑换运行超时

在这种情况下,如何 for each 元素添加id?

PrivateRoute不是路由组件错误

为什么当我解析一个promise时,输出处于挂起状态?

你怎么看啦啦队的回应?

阿波罗返回的数据错误,但在网络判断器中是正确的

Regex结果包含额外的match/group,只带一个返回

JSDoc创建并从另一个文件导入类型

如何在Angular17 APP中全局设置AXIOS

我在Django中的视图中遇到多值键错误

material UI按钮组样式props 不反射

用于在路径之间移动图像的查询

如何在.NET Core中将chtml文件链接到Java脚本文件?

JavaScript不重定向配置的PATH

Pevent触发material 用户界面数据网格中的自动保存