【问题标题】:Set a max-width and max-height for table cells为表格单元格设置最大宽度和最大高度
【发布时间】:2023-03-23 00:26:01
【问题描述】:

是否可以为 Handsontable 中的单元格设置 max-widthmax-height

我尝试通过 CSS 在 <th><td> 元素上进行设置,但这不起作用。

我在文档中看到您可以将列设置为特定宽度,但不能设置最大值。

【问题讨论】:

  • 不知道答案,一直想了解自己,但这里是一个开始的地方:如果你不设置 colWidths 并将 rowResizing 设置为 true,那么有一个 min-width设置在某个地方,不允许您低于显示整个 colHeader 所需的宽度。也许这有帮助?
  • 得到了一些东西。当您说“设置最大值”时,您是指调整事件大小还是一般情况?我写了一些调整大小的东西,如果你想在渲染上一般情况下不超过一定数量,可以调整它。让我知道,但与此同时我会发布调整大小的
  • 你解决了这个问题吗?我从 HOT 团队那里得知,他们将在未来开发此功能。

标签: handsontable


【解决方案1】:

因此,解决方案是使用 HOT 实例的 manualColumnWidths 数组。该数组将自动设置所有列的宽度。它嵌套在代码中的某个地方,因此只要 DOM 发生更改,它就会更新,这就是为什么在元素本身的宽度上使用 CSS 或 jQuery 不起作用的原因。这是一个很好的结构,我们只需要在某个地方更明确地写出来。

请注意,您可以对 rows 重复此操作,只需使用 manualRowHeights 以及其余的 row 方法即可。

现在,您将如何设置列大小调整事件的最大值和最小值。将afterColumnResize 选项设置为以下函数:

function setAfterColumnResize() {
  return function(col, size) {

    var headers = $(".colHeader"); // first is empty if there are rowHeaders
    var maxW = [10, 200, 400]; // note that the first is the row header
    var minW = [1, 100, 100]; // note that the first is the row header

    var actualCol = col + 1; // this is to account for the row header

    var maxColW = maxW[actualCol];
    var minColW = minW[actualCol];
    var actualW = $(headers[actualCol]).parent().parent().width();

    if (hot && maxColW && actualW > maxColW) {
      hot.manualColumnWidths[col] = maxColW;
      hot.render()
    }

    if (hot && minColW && actualW < minColW) {
      hot.manualColumnWidths[col] = minColW;
      hot.render()
    }
  }
}

现在让我解释一下。当此事件被触发时,您首先使用它为您提供的col 索引找到标题。如果您将行标题设置为true(这是我在这里和小提琴中所做的),请更正它。然后你设置最大/最小宽度的数组(当然你可以在你的代码中更优雅地做到这一点)。

然后通过查看跨度的父级父级来获取相关列的实际当前宽度(这有点混乱,但这是我发现的最简单的方法)。后面的条件应该是不言自明的。

最后,重要的部分。你可以看到通过访问hot.manualColumnWidths 可以设置你想要的宽度。如果我当前的宽度超过它,我将它设置为最大值。然后重新渲染就完成了!

存在一些问题,例如这些事件仅在调整大小后才会被调用,因此如果您最初将表格设置为以大于最大宽度进行渲染,它不会做任何事情。如果是这种情况,只需在第一次渲染表格后调用此函数(每列调用一次)。

如果您不想使用列大小调整事件,也会出现这种情况;在这种情况下,它只是一个您在渲染后调用的普通函数。

希望这会有所帮助! Here 是一个演示小提琴,展示了它的实际效果:D

【讨论】:

  • 嗯,你的小提琴似乎不起作用。我可以在任何列中输入大量文本,它会超过 maxW 中指定的宽度。当我尝试调整它的大小时,列宽不会改变它只是保持当前宽度。
  • 您没有指定。我以为你的意思是你想限制调整大小超出某个点。小提琴完全按照预期工作。您的问题比您想象的要简单得多,因此您应该在输入文本时指定您在谈论 max 和 min。
  • 我只是说单元格不应该超过最大宽度或最大高度。无论表格是否刚刚加载,您正在输入、调整大小等 - 单元格不应超过最大宽度或最大高度
猜你喜欢
  • 2019-12-09
  • 2011-10-26
  • 2012-11-20
  • 1970-01-01
  • 2017-02-25
  • 1970-01-01
  • 2011-09-19
  • 2015-08-11
  • 1970-01-01
相关资源
最近更新 更多