2016-08-13 2 views
0

У меня есть два пункта:Matching точную строку в JQuery

<p>Some text</p> 
<p>Another text</p> 

и этот JQuery код:

if ($("p:contains('Right text')")) { 
    alert("Matching!"); 
}; 


$("p:contains('Right text')").css("text-decoration", "underline"); 

Он должен показывать предупреждение только если есть текст Right text. Но когда вы загружаете страницу, она отображается каждый раз. Вторая часть скрипта должна добавить подчеркивание к абзацу с Right text, и он работает - если он содержит Right text, у него есть подчеркивание.

Почему мой код не работает, хотя селектор такой же? Как я могу отобразить предупреждение, если есть правильный текст?

http://codepen.io/anon/pen/mEvOWA?editors=1010

+4

Вы должны проверить 'length', потому что даже пустой объект truthly значение в JavaScript –

+1

' $ ('nonexistant') '- объект jQuery длины ноль, но все же объект и, следовательно, все еще передает наивный' if' –

ответ

2

Это потому, что объект JQuery будет преобразовано в логическое значение для условия. Если он не совпадает, он будет объектом JQuery length:0, но все равно будет преобразован в true. Он будет преобразован только в false, если он был 0, -0, null, false, NaN, undefined.

Попробуйте вместо этого:

if ($("p:contains('Right text')").length) { 
    alert("Matching!"); 
} 
1

$("p:contains('Right text')") всегда возвращает массив. Этот массив определен, поэтому, если вы попытаетесь преобразовать его в boolean, вы всегда получаете true. Проверьте длину массива - оно должно быть больше 0.

Правый код:

if ($("p:contains('Right text')").length > 0) { 
    alert("Matching!"); 
}; 


$("p:contains('Right text')").css("text-decoration", "underline"); 

Примечание: если есть Right text blah blah будет иметь подчеркивание тоже, потому что она содержит Right text. Если вы хотите, чтобы проверить полное содержание сделать

$("p").each(function() { 
    if ($(this).html() == "Right text") { 
     alert("Matching"); 
     $(this).css("text-decoration", "underline"); 
    } 
}); 
1

попробуйте использовать для-каждого, а затем получить строку текста каждого тега р и использовать IndexOf, чтобы найти позицию строки, которую вы хотите, чтобы соответствовать, если строка нашел положение все это> -1 в противном это будет -1 в случае, если это не матч

$('p').each(function(){ 
    if($(this).text().indexOf('code example') > -1){ 
     console.log($(this).text()); 
    } 
}); 
+0

, забыл, что текст должен был скопировать предыдущий файл rsion кода при тестировании не менее thx для -1. –

+0

Ваш ответ непонятен (во всяком случае, я буду держать +1 на). Сделайте шаги, например. 1. Бла-бла-бла. 2. Бла-бла-бла. 3. Бла-бла-бла. Не вставляйте текст вместе. –

Смежные вопросы