2009-09-16 8 views
24

Je dois sélectionner un élément en fonction de son texte dans jQuery.jQuery select basé sur le texte

Par exemple:

<span>this text</span> 

Je sais que je peux utiliser .contains() pour sélectionner en fonction du texte, mais ce n'est pas exclusif.

Je ne veux pas choisir:

<span>this text and that text</span> 

Je veux sélectionner l'élément si c'est le seul texte de l'élément.

En plus d'utiliser regex, comment faire avec les sélecteurs jQuery?

Merci.

Répondre

34

Vous avez un peu de poids avec le sélecteur: contains, mais cela ne va pas si loin. Vous aurez besoin de couper plus bas l'ensemble des éléments en fonction des correspondances de texte précis, comme dans:

$("span:contains(this text)") 
.filter 
(
    function() 
    { 
    return $(this).text() === "this text"; 
    } 
) 

Cela rend la première contient l'utilisation techniquement inutile, mais vous pouvez rencontrer les performances en commençant avec une petite collection de éléments SPAN avant de filtrer jusqu'à l'ensemble exact vous êtes intéressé par

EDIT. A pris la suggestion de Ken Browning utiliser la fonction text() au lieu de innerHTML pour la comparaison de chaîne dans la fonction filter. L'idée étant que innerHTML capturera le texte qui ne nous intéresse pas particulièrement (y compris le balisage).

+4

Bonne réponse, mais pourquoi utiliser 'innerHTML' au lieu de' $ (this) .text() '? Ne pas utiliser 'innerHTML' lui demander de rendre compte des cas où le critère inclut des caractères qui doivent être encodés (comme & -> &) –

+0

Pour le nitpicking, je vous ai donné +1 et un renvoi dans la réponse! –

+0

@DavidAndres Au lieu de 'innerHTML', vous pouvez également utiliser' innerText' qui est plus rapide que '.text()' et qui n'inclurait pas de balisage. – hitautodestruct

Questions connexes