Essayez ceci. Il marquera votre élément, créera un ensemble d'éléments correspondant à votre sélecteur et rassemblera tous les éléments de l'ensemble qui suit votre élément.
$.fn.findNext = function (selector) {
var set = $([]), found = false;
$(this).attr("findNext" , "true");
$(selector).each(function(i , element) {
element = $(element);
if (found == true) set = set.add(element)
if (element.attr("findNext") == "true") found = true;
})
$(this).removeAttr("findNext")
return set
}
EDIT
solution beaucoup plus simple en utilisant la méthode d'index. l'élément que vous appelez la méthode des besoins d'être sélectionnable par le même sélecteur si
$.fn.findNext = function(selector){
var set = $(selector);
return set.eq(set.index(this,) + 1)
}
pour libérer la fonction de ce handicap, nous pourrions youse les navigateurs possèdent compareDocumentposition
$.fn.findNext = function (selector) {
// if the stack is empty, return the first found element
if (this.length < 1) return $(s).first();
var found,
that = this.get(0);
$(selector)
.each(function() {
var pos = that.compareDocumentPosition(this);
if (pos === 4 || pos === 12 || pos === 20){
// pos === 2 || 10 || 18 for previous elements
found = element;
return false;
}
})
// using pushStack, one can now go back to the previous elements like this
// $("#someid").findNext("div").remove().end().attr("id")
// will now return "someid"
return this.pushStack([ found ]);
},
EDIT 2 c'est beaucoup plus facile d'utiliser $ .grep de jQuery. voici le nouveau code
$.fn.findNextAll = function(selector){
var that = this[ 0 ],
selection = $(selector).get();
return this.pushStack(
// if there are no elements in the original selection return everything
!that && selection ||
$.grep(selection, function(n){
return [4,12,20].indexOf(that.compareDocumentPosition(n)) > -1
// if you are looking for previous elements it should be [2,10,18]
})
);
}
$.fn.findNext = function(selector){
return this.pushStack(this.findNextAll(selector).first());
}
lors de la compression des noms de variables, cela devient un simple doublure.
Éditer 3 en utilisant les opérations au niveau du bit, cette fonction peut être encore plus rapide?
$.fn.findNextAll = function(selector){
var that = this[ 0 ],
selection = $(selector).get();
return this.pushStack(
!that && selection || $.grep(selection, function(n){
return that.compareDocumentPosition(n) & (1<<2);
// if you are looking for previous elements it should be & (1<<1);
})
);
}
$.fn.findNext = function(selector){
return this.pushStack(this.findNextAll(selector).first());
}
double possible de [jQuery pour trouver tous les éléments précédents qui correspondent à une expression] (http://stackoverflow.com/questions/322912/jquery-to-find-all-previous-elements-that-match- an-expression) – sachleen