7

背景

希望禁用突出显示表格的第一列。

HTML 源代码

<table>
<tbody>
    <tr><td class="unselectable" unselectable="on"><button value="1" unselectable="on" class="unselectable"><div unselectable="on" class="unselectable">&#x2718;</div></button></td><td>Row 1</td></tr>
    <tr><td class="unselectable" unselectable="on"><button value="2" unselectable="on" class="unselectable"><div unselectable="on" class="unselectable">&#x2718;</div></button></td><td>Row 2</td></tr>
    <tr><td class="unselectable" unselectable="on"><button value="3" unselectable="on" class="unselectable"><div unselectable="on" class="unselectable">&#x2718;</div></button></td><td>Row 3</td></tr>
</tbody>
</table>

CSS 源代码

*.unselectable {
  -webkit-touch-callout: none;
  -webkit-user-select: none;
  -khtml-user-select: none;
  -moz-user-select: -moz-none;
  -ms-user-select: none;
  user-select: none;
}

小提琴

http://jsfiddle.net/2LQfg/1/

问题

当用户选择并在表格上拖动鼠标按钮时,按钮文本 (✘) 突出显示(不希望出现的行为)。当用户复制和粘贴值时,值 (✘) 不包括在内(期望的行为)。

为了澄清,这是当前的行为(不希望的):

不受欢迎的

下图显示了在表格上拖动鼠标后所需的行为:

期望的

大多数用户可能不会在意,但这是一种略微误导的用户体验。无论用户突出显示文本并复制它,都希望复制所有突出显示的文本。通过添加unselectable类,按钮的 (✘) 值会突出显示,但不会被复制。用户根本不应该能够突出显示(选择)(✘),因为它设置为unselectable

环境

我在 Xubuntu 上使用 Firefox 19.0.2,但我寻求跨浏览器的解决方案。

问题

防止用户突出显示第一个表格列(包含按钮)的跨浏览器方法是什么?

有关的

4

2 回答 2

2

content如果通过CSS 规则设置,浏览器似乎不会复制内容。希望你不需要支持 IE7

button.unselectable:after {
    content: "\2718";
}

http://jsfiddle.net/ExplosionPIlls/2LQfg/50/

于 2013-04-02T03:18:40.207 回答
1

只是一种解决方法

到目前为止,我只找到了一个相当不方便的解决方法。它隐藏元素中的所有“实际”文本,unselectable并通过伪元素将其替换为伪文本:before。注意:如果不需要在 html 中实际包含“实际”文本,则span可以消除下面的嵌套元素(以及因此的一些冗余 html)和关联的 css,但这一切都取决于文本的“重要性”程度在您的实际应用程序中(用于屏幕阅读器、搜索引擎等)。

小提琴的例子。

HTML

<table>
<tbody>
    <tr><td><button value="1"><div class="unselectable" data-content="&#x2718"><span>&#x2718;</span></div></button></td><td>Row 1</td></tr>
    <tr><td><button value="2"><div unselectable="on"   class="unselectable" data-content="&#x2718"><span>&#x2718;</span></div></button></td><td>Row 2</td></tr>
    <tr><td><button value="3"><div unselectable="on"  class="unselectable" data-content="&#x2718"><span>&#x2718;</span></div></button></td><td>Row 3</td></tr>
</tbody>
</table>

CSS

*.unselectable {
  -webkit-touch-callout: none;
  -webkit-user-select: none;
  -khtml-user-select: none;
  -moz-user-select: -moz-none;
  -ms-user-select: none;
  user-select: none;
}

*.unselectable span {
    display: none;
}

*.unselectable:before {
    content: attr(data-content);
}
于 2013-04-02T03:22:03.560 回答