I\'m trying to check in jQuery if a div contains some text, and then add a class if it does.
So I wrote something like this:
if( $(\"#field >
Why not simply
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
}
}
Ayman is right but, you can use it like that as well :
if( $("#field > div.field-item").text().indexOf('someText') >= 0) {
$("#somediv").addClass("thisClass");
}
Your code contains two problems:
==
, not =
.jQuery.text()
joins all text nodes of matched elements into a single string. If you have two successive elements, of which the first contains 'some'
and the second contains 'Text'
, then your code will incorrectly think that there exists an element that contains 'someText'
.I suggest the following instead:
if ($('#field > div.field-item:contains("someText")').length > 0) {
$("#somediv").addClass("thisClass");
}
Here's a vanilla Javascript solution in 2020:
const fieldItem = document.querySelector('#field .field-item')
fieldItem.innerText === 'someText' ? fieldItem.classList.add('red') : '';
Yes, I now made think for me. And it works fine!!!
if($("div:contains('CONGRATULATIONS')").length)
{
$('#SignupForm').hide(500);
}
You might want to try the contains
selector:
if ($("#field > div.field-item:contains('someText')").length) {
$("#somediv").addClass("thisClass");
}
Also, as other mentioned, you must use == or === rather than =.