关于javascript:如何使用jQuery或CSS使许多元素无法选择?

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具有需要单击的按钮。


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*/
}


专有的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


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:

1
...

参考:

  • 有没有办法使DIV不可选择?
  • 在jQuery中禁用选择