Πώς μπορώ να ελέγξω αν η συμβολοσειρά περιέχει υποσύνολο;

Έχω ένα καλάθι αγορών που εμφανίζει επιλογές προϊόντων σε ένα αναπτυσσόμενο μενού και αν επιλέξουν "ναι", θέλω να κάνω ορατά κάποια άλλα πεδία στη σελίδα.

Το πρόβλημα είναι ότι το καλάθι αγορών περιλαμβάνει επίσης τον τροποποιητή τιμής στο κείμενο, ο οποίος μπορεί να είναι διαφορετικός για κάθε προϊόν. Ο ακόλουθος κώδικας λειτουργεί:

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

...ή μπορείτε να χρησιμοποιήσετε τον τελεστή tilde:

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

Αυτό λειτουργεί επειδή η indexOf() επιστρέφει -1 αν η συμβολοσειρά δεν βρέθηκε καθόλου.

Σημειώστε ότι αυτό είναι ευαίσθητο στην πεζότητα.
Αν θέλετε μια αναζήτηση χωρίς ευαισθησία στην πεζότητα, μπορείτε να γράψετε

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

Ή,

if (/yes/i.test(str))
Σχόλια (12)

Θα μπορούσατε να χρησιμοποιήσετε search ή match για αυτό.

str.search( 'Yes' )

θα επιστρέψει τη θέση της αντιστοιχίας, ή -1 αν δεν έχει βρεθεί.

Σχόλια (10)

Ένας άλλος τρόπος:

var testStr = "This is a test";

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

Δοκιμασμένο σε Firefox, Safari 6 και Chrome 36

Σχόλια (4)