首先 .slice() 然后处理所有其他元素

First .slice() and then do things with all other elements

我很确定我已经在 jQuery 的某些早期版本中这样做了,但 http://api.jquery.com/category/traversing/ 似乎另有建议。

我要找的是 .addBack() 的相反类型 - 一个使用 "all other" 元素的遍历函数(不是 .not()!)

Preusdo 示例:

$('.some-class li').slice(33,55).hide().allOthers().show()

编辑:这实际上不是基于 hide() / show() 的问题,这只是一个简单的例子来阐明我的意思。

首先,我想操作 .slice() 选择的一组元素,然后操作 不是 .slice() 选择的所有元素.

是否有一个我错过的方便的遍历函数可以做到这一点? 我知道一般如何解决它,但是 ".allOthers()" 我可能会使用的方法错过了肯定会更得心应手更清楚

先全部显示,然后隐藏33到55,这里是demo

$('.some-class li').show().slice(33,55).hide();

在你的情况下,你可以在调用 slice 之前调用 show

$('.some-class li').show().slice(33,55).hide();

确实没有办法得到所有其他的,最接近的是像你提到的那样把它们取回以前的collection,http://api.jquery.com/addback/

你可以实现一个插件,因为我在我的手机上,我会直接写一些代码

// o(n*m), could be improved
function allOthers(jqObj) {
   var current = [].concat(jqObj);
   var prev = jqObj.addBack();

   return prev.filter(function(obj){
      return !current.includes(obj);
   });

}

在测试了@JuanMendes 的建议后,我试了一下,发现了一种实现这种功能的非常紧凑的方法,因为 jQuery 的 prevObject:

$.fn.others = function() {
  return this.prevObject.not( this );
}

我没有用其他方法对其进行太多测试,因此它可能需要进一步更改 - 但它似乎至少在 .slice() 上工作正常。

https://jsfiddle.net/1L3db7k4/