2009-05-23 7 views
41

J'essaie de vérifier dans jQuery si un div contient du texte, puis ajouter une classe si c'est le cas.Jquery: Vérification pour voir si div contient du texte, puis l'action

J'ai donc écrit quelque chose comme ceci:

if($("#field > div.field-item").text().indexOf('someText') = 0) { 
     $("#somediv").addClass("thisClass"); 
    } 

Je ne reçois pas que cela fonctionne.

<div id="field"><div class="field-item">someText</div></div> 

<div id="somediv"></div> 

Est-ce incorrect?

Répondre

76

Votre code contient deux problèmes:

  • L'opérateur d'égalité en JavaScript est ==, pas =.
  • jQuery.text() joint tous les nœuds de texte des éléments correspondants en une seule chaîne. Si vous avez deux éléments successifs, dont le premier contient 'some' et le second contient 'Text', alors votre code pensera à tort qu'il existe un élément qui contient 'someText'.

Je suggère ce qui suit à la place:

if ($('#field > div.field-item:contains("someText")').length > 0) { 
    $("#somediv").addClass("thisClass"); 
} 
+2

syntaxe est un peu mal, il devrait être: ne contient pas .contains –

+0

@TM - était une faute de frappe. Fixé. Merci! –

+0

La syntaxe correcte est: contient et ne contient pas .contains – duckyflip

1

Vous pourriez vouloir essayer le sélecteur contains:

if ($("#field > div.field-item:contains('someText')").length) { 
    $("#somediv").addClass("thisClass"); 
} 

En outre, comme mentionné d'autres, vous devez utiliser == ou === plutôt que =.

4
if($("#field > div.field-item").text().indexOf('someText') >= 0) 

Certains navigateurs incluront des espaces, d'autres non. >= est approprié ici. Sinon, l'égalité est à double égal ==

3

Ayman est juste, mais, vous pouvez l'utiliser comme ça aussi:

if($("#field > div.field-item").text().indexOf('someText') >= 0) { 
     $("#somediv").addClass("thisClass"); 
    } 
10

Oui, maintenant je fait un penser pour moi. Et ça marche bien !!!

if($("div:contains('CONGRATULATIONS')").length) 
         { 
          $('#SignupForm').hide(500); 
         } 

IT fonctionne très bien

3

Pourquoi ne pas simplement

var item = $('.field-item'); 
for (var i = 0; i <= item.length; i++) { 
     if ($(item[i]).text() == 'someText') { 
      $(item[i]).addClass('thisClass'); 
      //do some other stuff here 
      } 
    } 
+0

Merci beaucoup! –

+0

réponse non valide,. est de sélectionner une classe, pas un identifiant –

Questions connexes