首先.slice()然后用所有其他元素做事

时间:2016-02-18 11:51:11

标签: javascript jquery slice

我很确定我已经在早期版本的jQuery中做过这个,但是http://api.jquery.com/category/traversing/似乎也暗示了这一点。

我正在寻找的是.addBack()的相反类型 - 一个使用“所有其他”元素的遍历函数(不是.not()!)

Preusdo示例:

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

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

首先,我想操纵用.slice()选择的一组元素,然后操纵.slice()选择的的所有元素。

是否有一个方便的遍历功能我错过了那个呢?我知道如何解决它一般,但我可能错过的".allOthers()"方法肯定会更方便,更清晰。

3 个答案:

答案 0 :(得分:2)

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

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

确实没有方法可以获得所有其他方法,最接近的是如上所述回到以前的收藏,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);
   });

}

答案 1 :(得分:1)

首先显示所有这些,然后从33到55隐藏,这是demo

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

答案 2 :(得分:1)

在测试了@JuanMendes的建议之后,由于jQuery的prevObject,我找到了一些实现这种功能的紧凑方式:

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

我没有用其他方法测试太多,所以可能需要进行一些进一步的更改 - 但它似乎至少可以与.slice()一起使用。

https://jsfiddle.net/1L3db7k4/