Como posso verificar se o fio contém substrato?

Eu tenho um carrinho de compras que exibe as opções do produto em um menu suspenso e se eles selecionarem "sim", eu quero tornar alguns outros campos na página visíveis.

O problema é que o carrinho de compras também inclui o modificador de preço no texto, que pode ser diferente para cada produto. O seguinte código funciona:

$(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();
        }
    });
});

No entanto eu preferia usar algo como isto, que não't funciona:

$(document).ready(function() {
    $('select[id="Engraving"]').change(function() {
        var str = $('select[id="Engraving"] option:selected').text();
        if (str *= "Yes") {
            $('.engraving').show();
        } else {
            $('.engraving').hide();
        }
    });
});

Só quero executar a ação se a opção selecionada contiver a palavra "Sim" e ignoraria o modificador de preço.

Solução

Assim:

if (str.indexOf("Yes") >= 0)

...ou pode usar o operador de til:

if (~str.indexOf("Yes"))

Isto funciona porque indexOf() retorna -1 se a string foi't encontrada de todo.

Note que isto é sensível a maiúsculas e minúsculas.
Se você quiser uma busca sem distinção de maiúsculas e minúsculas, você pode escrever

if (str.toLowerCase().indexOf("yes") >= 0)

Ou..,

if (/yes/i.test(str))
Comentários (12)

Você poderia usar search ou match para isso.

str.search( ' Sim' )

retornará a posição do jogo, ou -1 se for't encontrado.

Comentários (10)

Outra maneira:

var testStr = "This is a test";

if(testStr.contains("test")){
    alert("String Found");
}

Testado no Firefox, Safari 6 e Chrome 36

Comentários (4)