web-dev-qa-db-fra.com

jQuery: sélectionnez uniquement une classe contenant une chaîne?

J'utilise actuellement ceci pour obtenir la classe pour un morceau spécifique de HTML sur la page:

$(this).parent("div").attr('class')

Mais que div a plusieurs classes: current_status status_billed

Mon objectif final ici est de récupérer la classe qui commence par status_ Et de la remplacer par un nom de classe différent.

Donc, en utilisant ma fonction .parent() ci-dessus, je peux sélectionner le div dont j'ai besoin, mais je dois ensuite supprimer la classe status_billed Et la remplacer par, par exemple, status_completed (ou un certain nombre d'autres noms de classe).

20
Shpigford

Sélectionnez divs qui ont la classe status_billed:

$(this).parent('div.status_billed')

Sélectionnez divs dont l'attribut class contient status_:

$(this).parent('div[class*=status_]')

C'est à peu près le meilleur que vous obtiendrez avec sélecteurs jQuery . Vous pouvez faire mieux en utilisant .filter() :

$(this).parent('div').filter(function ()
{
    var classes = $(this).attr('class').split(' ');
    for (var i=0; i<classes.length; i++)
    {
        if (classes[i].slice(0,7) === 'status_')
        {
            return true;
        }
    }
    return false;
});

... mais je ne sais pas pourquoi vous faites tout cela - .parent() renvoie au plus 1 élément. Vouliez-vous dire .closest() ou .parents() ?

44
Matt Ball