75 votes

jQuery :contient du sélecteur de recherche pour plusieurs chaînes de caractères

En supposant que j'ai:

<li id="1">Mary</li>
<li id="2">John, Mary, Dave</li>
<li id="3">John, Dave, Mary</li>
<li id="4">John</li>

Si j'ai besoin de trouver tous les <li> les Éléments qui contiennent "John" et "Marie", comment pourrais-je construire le jQuery?

A la recherche d'une chaîne unique semble facile:

$('li:contains("John")').text()

Je suis à la recherche de quelque chose comme le pseudo-code suivant:

$('li:contains("John")' && 'li:contains("Mary")').text()

Merci!

133voto

Adam Kiss Points 6930

réponse

Je pense que c'est plus quelque chose comme:

$('li:contains("Mary"):contains("John")').

explication

Il suffit de penser de :contains tout comme il wass .someClass:

$('li.classone, li.classtwo'). //you want either classone OR classtwo
$('li.classone.classtwo'). //you want BOTH on one element
/* same with :contains */
$('li:contains("mary"), li:contains("john")'). // either one OR two
$('li:contains("mary"):li:contains("john")'). //li, which contains both

extrait de

la preuve:

http://jsbin.com/ejuzi/edit

9voto

Kristof Points 29

Réponse

La syntaxe correcte serait $("li:contains('John'),li:contains('Mary')").css("color","red")

Mais j'ai découvert que si vous avez eu beaucoup de cas de test, jQuery va faire très mal (surtout sur IE6, je sais, c'est vieux mais encore en usage). J'ai donc décidé d'écrire mon propre filtre attribut.

C'est la façon de l'utiliser: $("li:mcontains('John','Mary')").css("color","red")

Code

jQuery.expr[':'].mcontains = function(obj, index, meta, stack){
    result = false;     
    theList = meta[3].split("','");

    var contents = (obj.textContent || obj.innerText || jQuery(obj).text() || '')

    for (x=0;x<theList.length;x++) {
        if (contents.indexOf(theList[x]) >= 0) {
            return true;
        }
    }

    return false;
};

8voto

Lazarus Points 17526

Que diriez -

$('li:contains("John"),li:contains("Mary")')

1voto

Slava Points 11

C'est facile:

$("li:contains('John'):contains('Mary')")

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