选择除一个及其子/孙之外的所有元素

sui*_*ish 5 html javascript css jquery

我正在寻找一种方法来选择除一个元素及其后代之外的所有元素,这些元素可能有子/孙子甚至更多.我真正想做的是......

$("*").not(".foo, .foo *").bind("touchmove",function(e){
    e.preventDefault();
});
Run Code Online (Sandbox Code Playgroud)

这将禁用touchmove除fooclass及其子项之外的所有事件.但不幸的是,我不知道它会有多少代,因为我要编写的代码将被用于很多模板文件中,因此它们可能根本没有孩子,或者他们可能有10代家庭.

有没有办法实现这个?除了制作新的dev/span以包装其他所有人,而不是我不想选择的那个.(这个解决方案需要很长时间才能出于某种原因.)

任何建议或建议将不胜感激.

Ita*_*Gal 1

您的代码完全符合您的要求:

JSFiddle 示例

你尝试过吗?我用悬停做了一个小例子,使其可见+我只选择了 div 和 p 以使它更容易,但它也适用于所有元素。

$("div,p").not(".foo, .foo *").hover(function(){
    $(this).css("background", "#70A5C9");
},function(){
    $(this).css("background", "#ffffff");
});
Run Code Online (Sandbox Code Playgroud)

它之所以有效,是因为每个后代都继承了其祖先的类。在我的示例中,您可以看到最深的 div 将包含所有 fooX 类(1 < X < 6)。

看另一个可见的例子,一旦我给 foo3 一个新的背景颜色,所有内部 foo 将具有相同的背景颜色。