如何使表格中只有一列可选?

Posted

技术标签:

【中文标题】如何使表格中只有一列可选?【英文标题】:How can I make only one column of a table selectable? 【发布时间】:2015-11-09 10:24:24 【问题描述】:

我可以阻止用户突出显示表格中的一列吗?

我有一个 2 列表。用户将希望复制第二列中的内容,而不是第一列。

<table>
    <tr>
        <td>col1</td>
        <td>line1</td>
    </tr>
    <tr>
        <td>col1</td>
        <td>line2</td>
    </tr>
    <tr>
        <td>col1</td>
        <td>line3</td>
    </tr>
</table>

这是一个带有示例的 JSFiddle: http://jsfiddle.net/vepq0e29/

当用户复制和粘贴时,我希望输出只是: 第1行 线2 第 3 行 ... 第7行

我不希望 col1 在用户选择表格时显示或突出显示。

如何让用户只能从第二列中选择和复制内容?

谢谢!

【问题讨论】:

【参考方案1】:

请查看此示例,尝试使用下面的Run Cde Snippet,然后选择单列中的所有行,然后复制并粘贴到任何编辑器中并查看结果:)

希望这会有所帮助

div.table 
  display: block;
  width: 100%;

div.td-outer 
  width: 48%;
  display: inline-block;
  border: 1px solid #00aaff;
  text-align: center;
  vertical-align: middle;
  height: 100%;

div.tr 
  display: block;
  text-align: center;
  height: 140px;
  vertical-align: middle;

div.td-inner 
  display: inline-block;
  border: 1px solid #ccc;
  width: 90%;
  vertical-align: middle;
  height: 95%;
  margin: 3px;

div.td-inner span 
  height: 95%;
  vertical-align: middle;
<div class="table">
  <div class="td-outer">
    <div class="tr">
      <div class="td-inner"> <span>
            col1
                    </span>

      </div>
    </div>
    <div class="tr">
      <div class="td-inner"> <span>
     col1
        </span>

      </div>
    </div>
  </div>
  <div class="td-outer">
    <div class="tr">
      <div class="td-inner"> <span>
        line1
        </span>

      </div>
    </div>
    <div class="tr">
      <div class="td-inner"> <span>
        line2
        </span>

      </div>
    </div>
  </div>
</div>

【讨论】:

【参考方案2】:

您可以使用伪元素来显示文本。目前从不会复制来自伪元素的文本(不确定,是否会在某个时候更改)。

http://jsfiddle.net/vepq0e29/3/

td:first-child:after 
    content: attr(aria-label);
<table>
    <tr>
        <td aria-label="col1"></td>
        <td>line1</td>
    </tr>
    <tr>
        <td aria-label="col1"></td>
        <td>line2</td>
    </tr>
    <tr>
        <td aria-label="col1"></td>
        <td>line3</td>
    </tr>
    <tr>
        <td aria-label="col1"></td>
        <td>line4</td>
    </tr>
    <tr>
        <td aria-label="col1"></td>
        <td>line5</td>
    </tr>
    <tr>
        <td aria-label="col1"></td>
        <td>line6</td>
    </tr>
    <tr>
        <td aria-label="col1"></td>
        <td>line7</td>
    </tr>
</table>

【讨论】:

【参考方案3】:
tr td:first-child 
  -webkit-user-select: none;  /* Chrome all / Safari all */
  -moz-user-select: none;     /* Firefox all */
  -ms-user-select: none;      /* IE 10+ */
  user-select: none;          /* Likely future */      

用户只要不查看html源代码就不能选择第一列。 http://jsfiddle.net/vepq0e29/1/

【讨论】:

感谢您的回复。虽然第一列没有突出显示,但如果我复制和粘贴,第一列仍然会在我粘贴时显示。 错了。您不允许在第一列内开始或结束选择。但是如果你选择几行并复制它们,第一列也会在那里。 你是对的,我只是检查了我是否可以选择它,但当你复制它时会发生什么。 这种行为似乎与浏览器相关:刚刚尝试过并且使用最新版本:Chrome 和 IE 将粘贴第一列,但 Firefox 不会。 FireFox 和 Chrome 不会突出显示第一列,IE 会... @Qwertiy 你找到了使用 css 的最佳解决方案最佳解决方案

以上是关于如何使表格中只有一列可选?的主要内容,如果未能解决你的问题,请参考以下文章

如何使 HTML 表格中的一列缩小以适应?

vue多端不同列数

easyui:怎么让某一列可编辑?

带有表格布局的表格:固定;以及如何使一列更宽

如何使双列表格响应第二列在第一列之下?

怎样使excel表格内容按某一列排序