Jquery: Comprobando si div contiene texto, entonces acción

Estoy tratando de registrar en jQuery si un div contiene algo de texto, y luego agregar una clase si lo hace.

Entonces escribí algo como esto:

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

No estoy logrando que esto funcione.

 
someText

¿Es esto incorrecto?

Tu código contiene dos problemas:

  • El operador de igualdad en JavaScript es == , not = .
  • jQuery.text() une todos los nodos de texto de elementos coincidentes en una sola cadena. Si tiene dos elementos sucesivos, de los cuales el primero contiene 'some' y el segundo contiene 'Text' , entonces su código pensará incorrectamente que existe un elemento que contiene 'someText' .

Sugiero lo siguiente en su lugar:

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

Sí, ahora pensé en mí. Y funciona bien!

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

Funciona bien

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

Algunos navegadores incluirán espacios en blanco, otros no. >= es apropiado aquí. De lo contrario, la igualdad es doble ==

Ayman tiene razón, pero puedes usarlo así también:

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

Por qué no simplemente

 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 } } 

Es posible que desee probar el selector de contenidos:

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

Además, como otros mencionados, debe usar == o === en lugar de =.