我很确定我已经在早期版本的jQuery中做过这个,但是http://api.jquery.com/category/traversing/似乎也暗示了这一点。
我正在寻找的是.addBack()
的相反类型 - 一个使用“所有其他”元素的遍历函数(不是.not()
!)
Preusdo示例:
$('.some-class li').slice(33,55).hide().allOthers().show()
编辑:这实际上不是一个基于hide()/ show()的问题,这只是一个澄清我的意思的简单例子。
首先,我想操纵用.slice()
选择的一组元素,然后操纵.slice()
选择的不的所有元素。
是否有一个方便的遍历功能我错过了那个呢?我知道如何解决它一般,但我可能错过的".allOthers()"
方法肯定会更方便,更清晰。
答案 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()
一起使用。