У меня есть корзина, которая отображает варианты товаров в выпадающем меню, и если они выбирают "да", я хочу сделать видимыми некоторые другие поля на странице.
Проблема в том, что корзина также включает модификатор цены в текст, который может быть разным для каждого продукта. Работает следующий код:
$(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();
}
});
});
Я хочу выполнять действие, только если выбранный вариант содержит слово "Да", и игнорировать модификатор цены.
Например:
if (str.indexOf("Yes") >= 0)
... или вы можете использовать оператор тильда:
if (~str.indexOf("Yes"))
Это работает, потому что indexOf()
возвращает -1
, если строка не была найдена вообще.
Обратите внимание, что это чувствительно к регистру.
Если вам нужен поиск без учета регистра, вы можете написать
if (str.toLowerCase().indexOf("yes") >= 0)
Или,
if (/yes/i.test(str))
Уже довольно поздно писать этот ответ, но я все равно решил его включить. У 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
}
Ознакомьтесь с документацией, чтобы узнать больше.
Другой способ:
var testStr = "This is a test";
if(testStr.contains("test")){
alert("String Found");
}
Проверено на Firefox, Safari 6 и хром 36
В ECMAScript 6 вводит строки.прототип.включает
, ранее названный содержит
.
Он может быть использован такой:
'foobar'.includes('foo'); // true
'foobar'.includes('baz'); // false
Он также принимает необязательный второй аргумент, который указывает позицию, с которой начинать поиск:
'foobar'.includes('foo', 1); // false
'foobar'.includes('bar', 1); // true
Это может быть polyfilled]2, чтобы заставить его работать на старых браузерах.
Вы можете использовать этот полифилл в IE и Chrome
if (!('contains' in String.prototype)) {
String.prototype.contains = function (str, startIndex) {
"use strict";
return -1 !== String.prototype.indexOf.call(this, str, startIndex);
};
}
включает в себя() метод определяет, является ли одна строка в другую строку и возвращает true или false.
синтаксис :-строку.включает(searchString[, позиция])
searchString:-строку для поиска в этой строке.
должность:-необязательно. Положение в этой строке, с которой начинается поиск searchString; по умолчанию 0.
string = 'LOL';
console.log(string.includes('lol')); // returns false
console.log(string.includes('LOL')); // returns true
Я знаю, что лучший способ является STR.метод indexOf(ы) !== -1;
http://hayageek.com/javascript-string-contains/
Я предлагаю другой способ (ул..заменить(С1 " Ну и") !== ул.
):
в
var str = "Hello World!", s1 = "ello", s2 = "elloo";
alert(str.replace(s1, "") !== str);
alert(str.replace(s2, "") !== str);
в
Если вы не способны использовать библиотеки, вы можете обнаружить, что Ло-тире библиотека JS-это довольно полезно. В этом случае, идти вперед и проверить _.содержит()
(заменить `_.включает в себя () от В4).
(Примечание Ло-тире конвенции именования библиотеки объекта _. Дон'т забудьте проверить установки в той же странице, чтобы настроить его для вашего проекта.)
_.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");
..какой вам больше нравится.
Вы также можете проверить, если точные слова, содержащиеся в строке. Е. Г.:
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.
Ни один из выше работал для меня, как были пустые места, но это то, что я сделал
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";
}
}
}
вы можете определить метод расширения и использовать его в дальнейшем.
String.prototype.contains = function(it)
{
return this.indexOf(it) != -1;
};
так что вы можете использовать на Вашей странице в любом месте, таких как:
var str="hello how are you";
str.contains("are");
что возвращает правда.
См. ниже пост дополнительные вспомогательные методы расширения. Вспомогательные методы JavaScript