Javascript 在JQuery中有没有一种简单的方法来执行两个节点集之间的减法?

Javascript 在JQuery中有没有一种简单的方法来执行两个节点集之间的减法?,javascript,jquery,Javascript,Jquery,请注意:这个问题与我在这里发现的许多其他问题非常相似,但它不是重复的,因此请仔细阅读: 本质上,我希望通过(比如)类名从集合中排除节点及其所有子体 我所做的扩展(检查代码片段)在给定的示例中工作得非常完美,但是我愿意找到更简单/更优雅的方法来完成它(如果jquery中当前存在的话) 我正在寻找一种通用的方法来执行$(this).find('').exclude\u found\u nodes\u在前面提到的\u this\u和\u本身('')之间有以下\u的\u 类似于$(this).find(

请注意:这个问题与我在这里发现的许多其他问题非常相似,但它不是重复的,因此请仔细阅读:

本质上,我希望通过(比如)类名从集合中排除节点及其所有子体

我所做的扩展(检查代码片段)在给定的示例中工作得非常完美,但是我愿意找到更简单/更优雅的方法来完成它(如果jquery中当前存在的话)

我正在寻找一种通用的方法来执行
$(this).find('').exclude\u found\u nodes\u在前面提到的\u this\u和\u本身('')之间有以下\u的\u
类似于
$(this).find(':ignore\u branch\u,如果\u this\u node\u met())
也可以执行此任务

ID实际上并不存在于代码中,它们的添加纯粹是为了演示目的(“起始节点”由用户选择)

$.fn.find\u exclude=函数(原始\u选择器,排除\u选择器){
var counter=$(this).parents(排除选择器).length;
if($(this).is(排除_选择器)){
计数器++;
}
var tmp=$(this).find(原始选择器);
返回tmp.filter(函数(){
if($(此).is(排除_选择器)||$(此).parents(排除_选择器).length>计数器){
返回false;
}
返回真值
});
};
$(函数(){
var all_b_in_main_not_in_groups=$(“#main”)。查找_exclude('b','.group');
var all_b_in_inner_not_in_groups=$(“#inner”)。查找_exclude('b','.group');
主组中的所有组中的所有组。每个(函数(){
$(this.css('color','red');
});
所有组中的所有组中的组中的组。每个(函数(){
$(this.css('opacity','0.5');
});
})

我应该是红色的
我应该是不透明的,但不是红色的
我应该是红色的
请不要碰我。
请不要碰我。

请不要碰我。

使用:

使用:


您可以使用以下插件版本。它使用可以接受另一个jQuery选择的事实:

$.fn.find\u exclude=函数(原始\u选择器,排除\u选择器){
返回$(this).find(原始选择器).not(排除选择器)
.not($(this).find(排除选择器).find(原始选择器));
}
$(函数(){
var all_b_in_main_not_in_groups=$(“#main”)。查找_exclude('b','.group');
所有“主”中的“非”中的“组”。css('color','red');
var all_b_in_inner_not_in_groups=$(“#inner”)。查找_exclude('b','.group');
所有“内部”中的“非内部”组。css('opacity','0.5');
});

我应该是红色的
我应该是不透明的,但不是红色的
我应该是红色的
请不要碰我。
请不要碰我。

请不要碰我。


您可以使用以下插件版本。它使用可以接受另一个jQuery选择的事实:

$.fn.find\u exclude=函数(原始\u选择器,排除\u选择器){
返回$(this).find(原始选择器).not(排除选择器)
.not($(this).find(排除选择器).find(原始选择器));
}
$(函数(){
var all_b_in_main_not_in_groups=$(“#main”)。查找_exclude('b','.group');
所有“主”中的“非”中的“组”。css('color','red');
var all_b_in_inner_not_in_groups=$(“#inner”)。查找_exclude('b','.group');
所有“内部”中的“非内部”组。css('opacity','0.5');
});

我应该是红色的
我应该是不透明的,但不是红色的
我应该是红色的
请不要碰我。
请不要碰我。

请不要碰我。


不确定“不需要”是什么意思?你想实现什么,
.not()
无法实现?读作“它不符合我的需要”。包含这句话是为了鼓励在实际提议使用它之前尝试使用
:not()
。not()
,获得类似的结果。实际问题是什么?“在JQuery中有一种简单的方法在两个节点集之间执行减法吗?”编辑了一个问题,试着让它更清楚/不那么混乱。不确定你所说的“不需要”是什么意思?你想实现什么,
.not()
无法实现?读作“它不符合我的需要”。包含这句话是为了鼓励在实际提议使用它之前尝试使用
:not()
。not()
,获得类似的结果。实际问题是什么?“在JQuery中有没有一种简单的方法来执行两个节点集之间的减法?”编辑了一个问题,试图使其更清晰/更少混乱。您使用id。请重新阅读(我不久前编辑了这个问题)“ID实际上并不存在于代码中,它们纯粹是为了演示目的而添加的(“起始节点”由用户选择)。”附言:很抱歉没有很好地给出这样的限制示例-实际的代码/HTML太复杂了,所以我试图简化,但没有失去主要思想。另外,如果我想要,
$(this)。find('input,textarea,button')
-每次我需要smth else时,我都需要将它们包含在
not()
中?我要求的是一个通用的解决方案(减去集合)。对不起,我不是想挑剔,但主要问题是我不知道
containerSelector
beforead>(“起始节点”由用户选择)。所以我唯一能做的就是开始节点的
$(这个)
。@haldagan现在怎么样?再次为开始时的问题措辞混乱感到抱歉。我给你一个+但是特林科特的答案实际上更准确。正如我之前提到的,我想要一个通用的解决方案。在您的情况下,像
findWhat=“input,textarea,button”
这样的东西是不起作用的(因为
.find(ignoreWhat+''+findWhat)
将变成function customFind (findWhere, findWhat, ignoreWhat){ var totalIgnore = $(findWhere).find(ignoreWhat + ' ' + findWhat); return $(findWhere).find(findWhat).not(totalIgnore); }
var zzz= customFind(this,"b",".group");
zzz.css('text-decoration','underline');