2009-05-23 23 views
41

Próbuję sprawdzić w jQuery, czy element div zawiera jakiś tekst, a następnie dodać klasę, jeśli tak się dzieje.Jquery: Sprawdzanie, czy element div zawiera tekst, a następnie akcja

Więc napisałem coś takiego:

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

nie otrzymuję to do pracy.

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

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

Czy to jest nieprawidłowe?

Odpowiedz

76

Twój kod zawiera dwa problemy:

  • Operator równości w JavaScript jest == nie =.
  • jQuery.text() łączy wszystkie węzły tekstowe dopasowanych elementów w jeden ciąg znaków. Jeśli masz dwa kolejne elementy, z których pierwszy zawiera 'some', a drugi zawiera 'Text', to Twój kod błędnie pomyśli, że istnieje element zawierający 'someText'.

Proponuję następujące zamiast:

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

składnia jest nieco źle, powinno być: nie zawiera .contains –

+0

@TM - Czy literówka. Naprawiony. Dzięki! –

+0

Poprawna składnia to: zawiera i nie. Zawiera – duckyflip

1

Możecie spróbować selektor contains:

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

Ponadto, jak wspomniano inny, należy użyć albo == === raczej niż =.

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

Niektóre przeglądarki zawierają białe znaki, inne nie. >= jest odpowiednie tutaj. W przeciwnym razie równości jest podwójne równi ==

3

Ayman ma rację, ale można go używać tak jak dobrze:

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

Tak, teraz zanotował, że dla mnie. I działa dobrze !!!

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

działa dobrze

3

Dlaczego nie po prostu

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

Dziękuję bardzo! –

+0

nieprawidłowa odpowiedź,. jest wybrać klasę, a nie id div –

Powiązane problemy