How can I make MANY elements unselectable using jQuery or CSS?
Possible Duplicate:
Is there a way to make a DIV unselectable?
我已经看到了许多适用于某个元素的解决方案。但是我有一个带有标签和按钮的区域。它不仅是一个元素,而且是DIV中的每个元素。
如何使该DIV中包含的所有内容无法选择?请注意,我不能仅在DIV上放置遮罩层,因为DIV具有需要单击的按钮。
- 您是否尝试过使用$(this).each(function(){//禁用所需内容});
-
不会设置父项无法选择的工作?所有儿童都应包括在内。其他明智的尝试选择器mydivclass *
-
从我读到的unselectable不继承
-
它不是重复的,因为先前的问题是关于DIV的。我的问题是关于DIV中的所有内容。
1
| $(".yourdiv").children().css({userSelect: 'none'}); |
在这种情况下,您想使用CSS user-select属性禁用选择。如果不是这样,则可以很容易地将以上内容推广到其他方法。
以上仅选择直系子代,要选择所有后代,请使用.find()方法:
1
| $(".yourdiv").find("*").css({userSelect: 'none'}); |
您也可以使用纯CSS执行此操作:
1 2 3
| .yourdiv * { /*this selects all elements that are children of yourdiv*/
/*user-select: none rules*/
} |
或:
1 2 3
| .yourdiv > * { /*this selects all elements that are direct descendants of yourdiv*/
/*user-select: none rules*/
} |
- 谢谢。我如何将其扩展为还具有其他属性:-webkit-user-select:无; / * Chrome / Safari / -moz-user-select:无; / Firefox / -ms-user-select:无; / IE10 * / -o-user-select:无;用户选择:无;
-
$(".yourdiv *")将覆盖所有后代,而不仅仅是孩子
-
@SamanthaJ jQuery的新版本会根据需要自动添加前缀。
-
如果它包含许多元素,您是否认为这将是一项昂贵的操作?
-
可以将类添加到父级,然后使用css进行其余操作
-
@SamanthaJ请参阅编辑以获取注释。
-
@SamanthaJ有关纯CSS解决方案,请参见更新的答案。
-
我可以这样对身体吗?请注意,我从不希望用户能够选择任何东西。
-
@SamanthaJ当然,只需将上面示例中的.yourdiv替换为body。
-
这不适用于Opera or IE <10,后者不支持CSS -x-user-select属性。
-
@TimDown好吧,我相信OP提出问题的主要原因是如何将规则应用于所有子元素,而不是如何使元素变为不可选择。不过,我可能是错的。
专有的user-select CSS变体在所有支持它们的浏览器中继承。请参见以下示例:
http://jsfiddle.net/yD7bM/
您的问题是浏览器不支持这些CSS属性,即Opera和IE <=9。很高兴,这两种方法都实现了另一种选择:unselectable属性。但是,此属性不是继承的。
最好的解决方案是将unselectable="on"属性放在您需要在HTML中不可选择的每个元素上(即在服务器端进行操作)。但是,如果这不是一个选择,则可以使用JavaScript并使用递归函数。
如果您使用的是jQuery,则可以执行以下操作将unselectable属性添加到类" unselectable"及其所有后代的每个元素中:
1
| $(".unselectable").find("*").andSelf().attr("unselectable","on"); |
演示:http://jsbin.com/ulazic/2
-
您能否指向unselectable属性的任何文档?
-
嗯,浏览器支持如何?
-
@Pavlo:IE 5.5,Opera 8或9(找不到Opera的官方文档)。
-
@Pavlo:一些搜索显示Opera自2006年或更早以来就拥有它,这表明Opera 9中已添加了支持。
-
IE 10也不支持这些CSS属性。
-
@VoidKing:IE 10支持-ms-user-select:ie.microsoft.com/testdrive/HTML5/msUserSelect
-
@TimDown猜猜我上次尝试时弄乱了一些东西。我站得住了。
-
@TimDown实际上,我有IE 10,并且在将-ms-user-select应用于相同的元素(当我分配属性unselectable时无法选择其中的文本)之后,仍然可以选择文本。在任何版本的IE 10、9、8或更低版本中,无论哪种情况,缓存的清除程度如何,我都从未获得过适用于IE的所谓CSS规则。我在做什么错了?
-
@VoidKing:不知道你在做什么错。以下内容在IE 10中对我有效,只要它不处于任何兼容模式即可:jsfiddle.net/hBDZe/1
-
@TimDown Wierd,您的jsfiddle对我有用,但是如果我实施相同的确切规则-ms-user-select: none;,则对我不起作用。我总是使用它们来制作<button>元素(我一直认为该元素将应用于其中的文本),它肯定在IE 10中不起作用。但是,如果我将unselectable="on"分配给同一元素,则它就像一个魅力。此CSS规则与按钮元素一起使用时可能会有一些限制。至于兼容性模式,我不确定,但是我正在开箱即用地运行IE 10,这意味着我的用户也可以,无论哪种方式都可以。
CSS:
1 2 3 4 5 6 7
| div.unselectable {
-moz-user-select: -moz-none;
-khtml-user-select: none;
-webkit-user-select: none;
-o-user-select: none;
user-select: none;
} |
HTML:
参考:
-
有没有办法使DIV不可选择?
-
在jQuery中禁用选择