jQuery:如何选择仅包含特定字符串的类?

27

我目前正在使用以下代码来获取页面上特定HTML元素的类:

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

但是那个

有多个类: current_status status_billed

我的最终目标是获取以status_开头的类,并用不同的类名替换它。

所以使用我上面的.parent()函数,我能够选择我需要的div,但接下来需要删除status_billed类并用其他类名(例如status_completed或其他类名)来替换它。

1个回答

65
选择具有“status_billed”类的
元素:
$(this).parent('div.status_billed')

选择包含 status_class 属性的 div 元素:

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

使用.filter()可以更好地实现功能,但这已经是使用jQuery选择器所能达到的最佳效果了。

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

...但我不确定你为什么要这样做 - .parent() 最多只返回1个元素。你是不是想用.closest() 或者 .parents()


1
啊,好主意,谢谢。我刚刚删除了我的帖子,这样他就不会浪费时间去那条路了。 - McStretch
你也可以使用 return classes[i]; 而不是 return true; 来返回实际的 status_xxxx 状态。 - Thomas F.
@Thomas:这不是jQuery的filter()函数的工作方式。 "对于每个元素,如果函数返回true,则该元素将包含在过滤集中;否则,它将被排除在外。" - Matt Ball
不确定我是否能够清楚地表达自己的意思。我正在使用parent()来选择当前正在使用的元素的父级div。 我不需要返回具有该类的所有div。 我可以很好地选择我需要的div,但是最终我想知道以 status_ 开头的类的名称,因为它可能是多种不同的名称。 - Shpigford
@Matt Ball:没错,我的记忆出了点问题:(。不过还是谢谢你的纠正... - Thomas F.
@Azee,非常欢迎。只需记住,所有内容都在文档中!http://api.jquery.com - Matt Ball

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接