jQuery: Select only a class containing a string?

I'm currently using this to get the class for a specific bit of HTML on the page:

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

But that div has multiple classes: current_status status_billed

My end goal here is to grab the class that starts with status_ and replace it with a different class name.

So using my .parent() function above, I'm able to select the div I need, but I then need to remove the status_billed class and replace it with, for example, status_completed (or a number of other class names).

Answers:

Answer

Select divs that have the status_billed class:

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

Select divs whose class attribute contains status_:

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

That's about the best you'll get with jQuery selectors. You can do better using .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;
});

...but I'm not sure why you're doing all this - .parent() returns at most 1 element. Did you mean .closest() or .parents()?

Tags

Recent Questions

Top Questions

Home Tags Terms of Service Privacy Policy DMCA Contact Us

©2020 All rights reserved.