J'ai un panier d'achat qui affiche les options de produit dans un menu déroulant. S'ils sélectionnent "oui", je souhaite rendre visibles d'autres champs de la page.
Le problème est que le panier inclut également le modificateur de prix dans le texte, qui peut être différent pour chaque produit. Le code suivant fonctionne:
$(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();
}
});
});
Cependant, je préférerais utiliser quelque chose comme ceci, qui ne fonctionne pas:
$(document).ready(function() {
$('select[id="Engraving"]').change(function() {
var str = $('select[id="Engraving"] option:selected').text();
if (str *= "Yes") {
$('.engraving').show();
} else {
$('.engraving').hide();
}
});
});
Je souhaite uniquement exécuter l'action si l'option sélectionnée contient le mot "Oui" et ignorer le modificateur de prix.
Comme ça:
if (str.indexOf("Yes") >= 0)
... ou vous pouvez utiliser l'opérateur tilde:
if (~str.indexOf("Yes"))
Cela fonctionne parce que indexOf()
renvoie -1
si la chaîne n'a pas été trouvée.
Notez que ceci est sensible à la casse.
Si vous voulez une recherche ne respectant pas la casse, vous pouvez écrire
if (str.toLowerCase().indexOf("yes") >= 0)
Ou,
if (/yes/i.test(str))
Vous pouvez utiliser recherche ou correspondance pour cela.
str.search( 'Yes' )
renverra la position du match, ou -1 s'il n'est pas trouvé.
Autrement:
var testStr = "This is a test";
if(testStr.contains("test")){
alert("String Found");
}
** Testé sur Firefox, Safari 6 et Chrome 36 **
Il est assez tard pour écrire cette réponse, mais j'ai quand même pensé à l'inclure. String.prototype
a maintenant une méthode includes
qui peut vérifier la sous-chaîne. Cette méthode est sensible à la casse.
var str = 'It was a good date';
console.log(str.includes('good')); // shows true
console.log(str.includes('Good')); // shows false
Pour vérifier une sous-chaîne, l'approche suivante peut être adoptée:
if (mainString.toLowerCase().includes(substringToCheck.toLowerCase())) {
// mainString contains substringToCheck
}
Consultez le documentation pour en savoir plus.
ECMAScript 6 introduit String.prototype.includes
, précédemment nommé contains
.
Il peut être utilisé comme ceci:
_'foobar'.includes('foo'); // true
'foobar'.includes('baz'); // false
_
Il accepte également un deuxième argument facultatif qui spécifie la position à partir de laquelle commencer la recherche:
_'foobar'.includes('foo', 1); // false
'foobar'.includes('bar', 1); // true
_
Il peut être polyfilled pour le faire fonctionner sur les anciens navigateurs.
Vous pouvez utiliser ce Polyfill en ie et en chrome
if (!('contains' in String.prototype)) {
String.prototype.contains = function (str, startIndex) {
"use strict";
return -1 !== String.prototype.indexOf.call(this, str, startIndex);
};
}
Retourne le nombre de fois que le mot clé est inclus dans la chaîne.
var count = "I have one keyword".match(/keyword/g);
var clean_count = !count ? false : count.length;
La méthode includes () détermine si une chaîne peut être trouvée dans une autre chaîne, en renvoyant true ou false selon le cas.
Syntaxe: -string.includes (searchString [ position])
searchString: -Une chaîne à rechercher dans cette chaîne.
position: -Optional. La position dans cette chaîne à laquelle commencer la recherche de searchString; La valeur par défaut est 0.
string = 'LOL';
console.log(string.includes('lol')); // returns false
console.log(string.includes('LOL')); // returns true
Je sais que le meilleur moyen est str.indexOf(s) !== -1;
http://hayageek.com/javascript-string-contains/
Je suggère une autre manière (str.replace(s1, "") !== str
):
var str = "Hello World!", s1 = "Ello", s2 = "elloo";
alert(str.replace(s1, "") !== str);
alert(str.replace(s2, "") !== str);
Si vous êtes capable d'utiliser des bibliothèques, vous trouverez peut-être que Lo-Dash La bibliothèque JS est très utile. Dans ce cas, allez de l'avant et vérifiez _.contains()
(remplacé par _.includes()
à partir de v4).
(Remarque La convention Lo-Dash nomme l'objet de bibliothèque _. N'oubliez pas de vérifier l'installation dans la même page pour le configurer pour votre projet.)
_.contains("foo", "oo"); // → true
_.contains("foo", "bar"); // → false
// Equivalent with:
_("foo").contains("oo"); // → true
_("foo").contains("bar"); // → false
Dans votre cas, allez-y et utilisez:
_.contains(str, "Yes");
// or:
_(str).contains("Yes");
..whichever celui que vous préférez.
Vous pouvez également vérifier si le mot exact est contenu dans une chaîne. Par exemple.:
function containsWord(haystack, needle) {
return (" " + haystack + " ").indexOf(" " + needle + " ") !== -1;
}
Usage:
containsWord("red green blue", "red"); // true
containsWord("red green blue", "green"); // true
containsWord("red green blue", "blue"); // true
containsWord("red green blue", "yellow"); // false
Voici comment jQuery utilise sa méthode hasClass.
Aucune de ces solutions ne fonctionnait pour moi car il y avait des espaces mais c'est ce que j'ai fait
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";
}
}
}