85 votes

JQuery .hasClass pour plusieurs valeurs dans une instruction if

J'ai une simple instruction if comme suit :

if ($('html').hasClass('m320')) {

// do stuff 

}

Cela fonctionne comme prévu. Cependant, je souhaite ajouter d'autres classes à la classe if statement pour vérifier si l'une des classes est présente dans le fichier <html> tag. J'ai besoin qu'il ne s'agisse pas de toutes les classes, mais de la présence d'au moins une classe, mais il peut y en avoir plus.

Mon cas d'utilisation est le suivant : j'ai des classes (par ex. m320 , m768 ) ajoutés pour différentes largeurs d'affichage, de sorte que je ne veux exécuter certaines actions Jquery que si la largeur est spécifique (classe).

Voici ce que j'ai essayé jusqu'à présent :

1.

if ($('html').hasClass('m320', 'm768')) {

// do stuff 

}

2.

if ($('html').hasClass('m320')) || ($('html').hasClass('m768')) {

 // do stuff 

}

3.

 if ($('html').hasClass(['m320', 'm768'])) {

 // do stuff 

    }

Aucune de ces mesures ne semble fonctionner. Je ne suis pas sûr de ce que je fais de travers, mais probablement de ma syntaxe ou de ma structure.

3voto

CyberMonk Points 493

Voici une légère variation de la réponse proposée par jfriend00 :

$.fn.hasAnyClass = function() {
    var classes = arguments[0].split(" ");
    for (var i = 0; i < classes.length; i++) {
        if (this.hasClass(classes[i])) {
            return true;
        }
    }
    return false;
}

Permet d'utiliser la même syntaxe que .addClass() et .removeClass(), par exemple, .hasAnyClass('m320 m768') Il doit bien sûr être à l'épreuve des balles, car il suppose au moins un argument.

0voto

adeneo Points 135949
var classes = $('html')[0].className;

if (classes.indexOf('m320') != -1 || classes.indexOf('m768') != -1) {
    //do something
}

0voto

user1341417 Points 11

La méthode hasClass accepte un tableau de noms de classes comme argument :

$(document).ready(function() {
function filterFilesList() {
    var rows = $('.file-row');
    var checked = $("#filterControls :checkbox:checked");

    if (checked.length) {
        var criteriaCollection = [];

        checked.each(function() {
            criteriaCollection.push($(this).val());
        });

        rows.each(function() {
            var row = $(this);
            var rowMatch = row.hasClass(criteriaCollection);

            if (rowMatch) {
                row.show();
            } else {
                row.hide(200);
            }
        });
    } else {
        rows.each(function() {
            $(this).show();
        });
    }
}

    $("#filterControls :checkbox").click(filterFilesList);
    filterFilesList();
});

0voto

qwerty_igor Points 702

Ceci au cas où vous auriez besoin de la présence des deux classes. Pour la logique "ou" ou "ou", il suffit d'utiliser ||

$('el').hasClass('first-class') || $('el').hasClass('second-class')

N'hésitez pas à l'optimiser si nécessaire

-1voto

Essayez ceci :

if ($('html').hasClass('class1 class2')) {

// do stuff 

}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X