4 votes

Ordre des sélecteurs multiples de jQuery

Je voudrais sélectionner plusieurs boutons et cliquer sur le premier dans l'ordre. Quelque chose comme COALESCE fonction.

J'ai essayé ça :

$(".selector1, .selector2, .selector3").first().click();

Cela fonctionne mais la sélection suit l'ordre du DOM et non l'ordre de la requête de mon sélecteur. Une suggestion ?

5voto

Gerry Points 5599

JQuery renvoie toujours les éléments dans l'ordre du DOM, vous devrez donc faire quelque chose de ce genre :

$.each(['.selector1', '.selector2', '.selector3'], function(i, selector) {
    var res = $(selector);
    if (res.length) {
        res.first().click();
        return false;
    }
});

Vous pourriez pauvres que dans une extension jQuery comme ça :

$.coalesce = function(selectors) {
    var match;
    var selector = $.each(selectors, function(i, selector) {
        var res = $(selector);
        if (res.length) {
            match = res;
            return false;
        }
    });
    return match || $([]);
};

Et ensuite, appelez

$.coalesce(['.selector1', '.selector2', '.selector3']).first().click() ;

2voto

adeneo Points 135949

L'itération sur les éléments avec each() donnera le bon ordre, comme ceci :

var elms = [".selector1", ".selector2", ".selector3"];

$.each(elms, function(index, item) {
    $(item).append('<br><br>This is item '+index);
});​

FIDDLE

1voto

niutech Points 5023

Vous pouvez utiliser get() pour obtenir des tableaux d'éléments, puis les concaténer, comme ceci :

$($(".selector1").get().concat($(".selector2").get(), $(".selector3").get())).first().click();

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X