Как проверить, содержит ли строка подстроку?
У меня есть корзина для покупок, которая отображает параметры продукта в выпадающем меню, и я хочу, чтобы некоторые другие поля на странице были видны только в том случае, если они выбрали "Да" в предыдущей опции. Проблема в том, что в корзину покупок также включен модификатор цены в тексте, и это может быть различным для каждого продукта. Поэтому, если я это сделаю, это работает:
$(document).ready(function() {
$('select[id="Engraving"]').change(function() {
var str = $('select[id="Engraving"] option:selected').text();
if (str == "Yes (+ $6.95)") {
$('.engraving').show();
} else {
$('.engraving').hide();
}
});
});
Однако я предпочел бы использовать что-то вроде этого:
$(document).ready(function() {
$('select[id="Engraving"]').change(function() {
var str = $('select[id="Engraving"] option:selected').text();
if (str *= "Yes") {
$('.engraving').show();
} else {
$('.engraving').hide();
}
});
});
Что не работает.
Я хочу выполнить действие только в том случае, если выбранная опция содержит слово "Да" и игнорирует модификатор цены.
Я ценю любую помощь.
Ответы
Ответ 1
Вот так:
if (str.indexOf("Yes") >= 0)
... или вы можете использовать оператор тильды:
if (~str.indexOf("Yes"))
Это работает, потому что indexOf()
возвращает -1
, если строка не найдена вообще.
Обратите внимание, что это зависит от регистра.
Если вы хотите нечувствительный к регистру поиск, вы можете написать
if (str.toLowerCase().indexOf("yes") >= 0)
Или
if (/yes/i.test(str))
Ответ 2
Вы можете использовать search или match для этого.
str.search( 'Yes' )
вернет позицию совпадения или -1, если он не найден.
Ответ 3
Другой способ:
var testStr = "This is a test";
if(testStr.contains("test")){
alert("String Found");
}
** Проверено на Firefox, Safari 6 и Chrome 36 **
Ответ 4
Это довольно поздно, чтобы написать этот ответ, но я подумал о том, чтобы включить его в любом случае. String.prototype
теперь имеет метод includes
, который может проверять подстроку. Этот метод чувствителен к регистру.
var str = 'It was a good date';
console.log(str.includes('good')); // shows true
console.log(str.includes('Good')); // shows false
Чтобы проверить подстроку, можно сделать следующий подход:
if (mainString.toLowerCase().includes(substringToCheck.toLowerCase())) {
// mainString contains substringToCheck
}
Ознакомьтесь с документацией, чтобы узнать больше.
Ответ 5
Вы можете использовать этот Polyfill в ie и chrome
if (!('contains' in String.prototype)) {
String.prototype.contains = function (str, startIndex) {
"use strict";
return -1 !== String.prototype.indexOf.call(this, str, startIndex);
};
}
Ответ 6
В ECMAScript 6 представлен String.prototype.includes
, ранее названный contains
.
Его можно использовать следующим образом:
'foobar'.includes('foo'); // true
'foobar'.includes('baz'); // false
Он также принимает необязательный второй аргумент, который указывает позицию начала поиска:
'foobar'.includes('foo', 1); // false
'foobar'.includes('bar', 1); // true
Это может быть polyfilled, чтобы он работал в старых браузерах.
Ответ 7
Возвращает количество раз, когда ключевое слово включено в строку.
var count = "I have one keyword".match(/keyword/g);
var clean_count = !count ? false : count.length;
Ответ 8
Я знаю, что лучший способ - str.indexOf(s) !== -1;
http://hayageek.com/javascript-string-contains/
Я предлагаю другой способ (str.replace(s1, "") !== str
):
var str = "Hello World!", s1 = "ello", s2 = "elloo";
alert(str.replace(s1, "") !== str);
alert(str.replace(s2, "") !== str);
Ответ 9
Вы также можете проверить, содержится ли точное слово в строке. Например:.
function containsWord(haystack, needle) {
return (" " + haystack + " ").indexOf(" " + needle + " ") !== -1;
}
Использование:
containsWord("red green blue", "red"); // true
containsWord("red green blue", "green"); // true
containsWord("red green blue", "blue"); // true
containsWord("red green blue", "yellow"); // false
Вот как jQuery выполняет свой метод hasClass.
Ответ 10
Если вы способны использовать библиотеки, вы можете обнаружить, что библиотека Lo-Dash очень полезна. В этом случае идите и проверьте _.contains()
(заменяется на _.includes()
как на v4).
(Примечание. Соглашение Lo-Dash называет библиотечный объект _.
Не забудьте проверить установку на той же странице, чтобы настроить его для своего проекта.)
_.contains("foo", "oo"); // → true
_.contains("foo", "bar"); // → false
// Equivalent with:
_("foo").contains("oo"); // → true
_("foo").contains("bar"); // → false
В вашем случае, продолжайте и используйте:
_.contains(str, "Yes");
// or:
_(str).contains("Yes");
.. какой вам лучше.
Ответ 11
Метод includes() определяет, может ли одна строка быть найдена в другой строке, возвращая true или false соответственно.
Синтаксис: -string.includes(searchString [, position])
searchString: - Строка, которую нужно искать внутри этой строки.
позиция: -Дополнительный. Позиция в этой строке, в которой следует искать searchString; по умолчанию - 0.
string = 'LOL';
console.log(string.includes('lol')); // returns false
console.log(string.includes('LOL')); // returns true
Ответ 12
Ни один из вышеперечисленных не работал у меня, поскольку были пробелы, но это то, что я сделал
tr = table.getElementsByTagName("tr");
for (i = 0; i < tr.length; i++) {
td = tr[i].getElementsByTagName("td")[0];
bottab.style.display="none";
bottab2.style.display="none";
if (td) {
var getvar=td.outerText.replace(/\s+/, "") ;
if (getvar==filter){
tr[i].style.display = "";
}else{
tr[i].style.display = "none";
}
}
}
Ответ 13
вы можете определить метод расширения и использовать его позже.
String.prototype.contains = function(it)
{
return this.indexOf(it) != -1;
};
чтобы вы могли использовать его на своей странице в любом месте:
var str="hello how are you";
str.contains("are");
который возвращает true.
Обратитесь к сообщению ниже за дополнительными вспомогательными методами.
Методы поддержки Javascript