Dizenin alt dize içerip içermediğini nasıl kontrol edebilirim?

Ürün seçeneklerini bir açılır menüde görüntüleyen bir alışveriş sepetim var ve "yes" seçeneğini seçerlerse, sayfadaki diğer bazı alanları görünür hale getirmek istiyorum.

Sorun, alışveriş sepetinin metinde her ürün için farklı olabilen fiyat değiştiriciyi de içermesidir. Aşağıdaki kod çalışıyor:

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

Ancak bunun gibi çalışmayan bir şey kullanmayı tercih ederim:

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

Eylemi yalnızca seçilen seçenek "Yes" kelimesini içeriyorsa gerçekleştirmek istiyorum ve fiyat değiştiriciyi yok sayacağım.

Çözüm

Bunun gibi:

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

...veya tilde operatörünü kullanabilirsiniz:

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

Bu işe yarar çünkü indexOf(), dize hiç bulunamazsa -1 döndürür.

Bunun büyük/küçük harfe duyarlı olduğunu unutmayın.
Büyük/küçük harfe duyarlı olmayan bir arama yapmak istiyorsanız, şunları yazabilirsiniz

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

Ya da,

if (/yes/i.test(str))
Yorumlar (12)

Bunun için search veya match kullanabilirsiniz.

str.search( 'Yes' )

eşleşmenin konumunu veya bulunamazsa -1 değerini döndürür.

Yorumlar (10)

Başka bir yol:

var testStr = "This is a test";

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

Firefox, Safari 6 ve Chrome 36 üzerinde test edilmiştir

Yorumlar (4)