2010-11-01 3 views
6

Je joue avec certains sélecteurs, et je frappe un mur avec la sélection de texte à l'intérieur d'une cellule.jquery trouver le texte à l'intérieur <td>

Voici une tentative simple que je fais.

<table> 
<tr> 
    <td>First Name</td> 
    <td>*required</td> 
    </tr> 
</table> 

Je veux changer la classe pour cette cellule pour être « rouge » - si la chaîne « * nécessaire » se trouve.

Voilà ma tentative de jquery:

$("td:contains('*required')").addClass("red"); 

Cela cause toutes les cellules à appliquer cette classe, il semble. De meilleurs moyens de rechercher du texte spécifique?

+0

Pour autant que je puisse voir, cela fonctionne comme prévu. http://jsfiddle.net/nY29Q/ –

+0

Cela fonctionne pour moi. Pourriez-vous lier à/post sur http://jsfiddle.net le code que vous utilisez réellement? – lonesomeday

Répondre

23

Qu'est-ce que vous avez des œuvres, you can test it here, garder à l'esprit que tout parent <td>également contient ce texte que, pour faire une correspondance exacte faire:

$("td").filter(function() { return $.text([this]) == '*required'; }) 
     .addClass("red"); 

You can test it here.

+0

+1 me battre pour ça! – Stephen

+0

C'est un site intéressant. Je pourrais devoir le mettre en signet! Le code que j'utilise fonctionne, quand je le place sur un site simple, ce qui signifie que je dois avoir quelque chose d'autre qui fonctionne contre moi. dois faire un peu plus d'enquête. – coffeemonitor

+0

Je ne suis pas familier avec la fonction '$ .text()' - est-elle documentée quelque part? – lonesomeday

5

Vous pouvez toujours utiliser $.filter(), où seuls les éléments pour lesquels le rappel est vrai sont inclus dans la sélection. Par exemple:

$('td').filter(function(i) { 
    $(this).html().indexOf('*required') >= 0; 
}); 

également: vous voulez être plus précis avec votre sélecteur - pour l'efficacité, et aussi à cause de la réponse de Nick. Cependant, si vous envisagez l'efficacité, il est préférable de ne pas utiliser une méthode qui utilise un rappel en premier lieu. :)

En ce qui concerne les sélecteurs, pensez à utiliser $('#tableID > tr > td')... ou quelque chose de similaire.

-2

Vous ne devriez pas utiliser JavaScript pour faire ceci. Ce que vous devez utiliser est une classe CSS:

<table> 
<tr> 
    <td>First Name</td> 
    <td class="required">*required</td> 
    </tr> 
</table> 


<style type="text/css"> 
td.required { 
    color:red; 
} 
</style> 
+0

Je pense que le point est que la cellule n'a pas la classe pour commencer. –

+0

C'est exactement le point. merci Craver. – coffeemonitor

+0

Vous n'avez pas de contrôle sur le balisage? Comment seriez-vous en mesure d'écrire le JavaScript, mais ne pas être en mesure d'utiliser CSS de manière appropriée? Etes-vous en train d'expérimenter avec des sélecteurs comme un exercice d'apprentissage? – SnickersAreMyFave

Questions connexes