0

我们有一个项目,我们是否禁用了对所有正文内容的文本选择。因此,解决方案是普通浏览器的 CSS 样式(如user-select: none)和 IE 的解决方法(如document.body.onselectstart = function () { return false; })。

所以问题是:如何在 IE 的某些 div 元素中启用文本选择?以及如何简单快速地做到这一点?

4

4 回答 4

3

好吧,最简单的方法是颠倒您的逻辑,并将此规则仅应用于不应选择其文本的元素。将此规则应用于整个主体的问题在于,任何子元素都已经从其父(主体)元素接收到这个被覆盖的事件,并且重新初始化onselectstart事件的方法并不像某些人认为的那样容易他们的答案这里。在您的情况下,我会为整个主体删除此规则,然后仅将其应用于没有任何子元素的单个元素,其中不可应用压倒一切的规则。

例子:

<body>
  this is some text that is selectable
  <div style='-o-user-select: none;
              -webkit-user-select: none;
              -moz-user-select: -moz-none;
              -khtml-user-select: none;
              -ms-user-select: none;
              user-select: none;' 
       onselectstart='return false;'
       unselectable='on'>
    this is some text that's not selectable
  </div>  
</body>

>查看JSFiddle上的工作演示


请注意,尚不支持列出的某些单个属性,我还是添加了它们以防万一。规则集的编译方式可以支持尽可能多的不同浏览器。有些会遵循 CSS 样式,有些需要 JavaScript hack(IE < 10),而 Opera 浏览器遵循特殊的元素属性(见下文)。

编辑:增加了对 Opera 浏览器的支持 ( unselectable='on')

于 2013-01-28T07:20:52.260 回答
2
<div onselectstart='return true;'>blablabla</div>
于 2013-01-28T07:04:29.987 回答
2
    document.body.onselectstart = function (event) {
    if(event.srcElement.parentNode.id == 'mydiv')//you may need to loop if the parentNode is 
    {                                            //not a div element
        return true;
    }
    else{
        return false;
    }
 }

注意:禁用 javascript 将使用户能够选择文本

我已经更新了小提琴链接

于 2013-01-28T07:09:10.673 回答
0

使用 jQuery

$("body").disableSelection();
于 2013-01-28T08:11:07.447 回答