jQuery确定匹配的类是否有给定的ID

问题描述:

什么是jQuery具有以下语句的id等价物?jQuery确定匹配的类是否有给定的ID

$('#mydiv').hasClass('foo') 

所以你可以给一个类名并检查它是否包含一个提供的id。

类似:

$('.mydiv').hasId('foo') 
+0

我想一个样式应用到一定的股利。例如,在加载时,所有具有foo类的对象都会显示出来,但我可能想要切换类foo的一个实例,该对象的id为bar。 – 2010-02-12 16:50:46

+1

然后,您只需执行'$('#bar.foo')。toggle();'您将只拥有一个id,因为它们必须是文档独有的。如果你蚂蚁只切换那个id,如果它是类“foo”,那么只需将该类添加到id选择器。如果选择器找到一个空集,则不会发生任何事情,如果它找到一个结果集(其中只有一个结果集),那么它将切换该元素。我认为你已经过分想到了这一点。 – prodigitalson 2010-02-12 16:58:06

+0

是的,当然,谢谢。 – 2010-02-12 17:00:05

您可以通过combining multiple selectors将该逻辑烧入选择器。例如,我们可以针对给定ID的所有元素,这也有一个特定的类:

$("#foo.bar"); // Matches <div id="foo" class="bar"> 

这应该类似于东西,你会在CSS编写。请注意,它不适用于所有#foo元素(尽管应该只有一个),并且它不适用于所有.bar元素(虽然可能有很多)。它只会引用符合这两个属性的元素。

jQuery的也有很大的.is method,让您确定元素是否具有一定的素质。您可以针对字符串选择器,HTML元素或另一个jQuery对象测试jQuery集合。在这种情况下,我们只需对照一个字符串选择器来检查它:

$(".bar:first").is("#foo"); // TRUE if first '.bar' in document is also '#foo' 
+22

+1是'is()'。应该有一个'.hasId()'选择器,因为它似乎是'.hasClass()'的一个显而易见的合作伙伴...' – 2013-12-13 15:04:28

我可能会使用$('.mydiv').is('#foo');这就是说,如果你知道ID为什么难道不你只是把它应用到选择摆在首位?

+17

也许代码进入一个回调函数,需要以不同的方式处理某个特定情况。所以,该函数会自动传递一个jQuery对象,并具有未知属性。在这种情况下,$('your answer')是('helpful'); – 2012-02-08 21:19:40

+1

我可以想到任何数量的原因。如果您想应用移动设备的特定设置,例如某个元素的ID为“mobile”,该怎么办?为什么不重要。 – Placeable 2015-06-29 14:19:59

+0

那么只有1个元素应该有一个给定的'ID',否则它应该是一些其他的属性......我想如果所讨论的元素的结构位置基于页面或客户端/用户代理改变,那么确定,但其他比... – prodigitalson 2015-06-29 14:24:02

$('#' + theMysteryId + '.someClass').each(function() { /* do stuff */ }); 
+0

每个都不需要,因为永远不会有多个'#theMysteryId'。 – prodigitalson 2010-02-12 16:54:20

+2

那么这样可以节省将它分配给变量的麻烦,检查长度是否非空,然后继续执行代码。如果选择器不匹配,jQuery不会调用“each”函数,所以它非常干净。现在,如果你只想调用一些jQuery API,那么确定。 – Pointy 2010-02-12 21:20:11

只是说我最终用index()解决了这个问题。

没有别的似乎工作。

所以对于同级元素,这是一个很好的解决办法,如果你是一个普通类第一选择,然后要为每个特定的一个不同的修改的东西。

编辑:对于那些不知道谁(像我一样),指数()给出了不同的选择相匹配,从0开始计数,这取决于它们在DOM顺序元素的索引值。只要你知道class =“foo”有多少元素,你就不需要一个id。

显然,这并不总是帮助,但有人可能会发现它很有用。

比方说,你是通过一些DOM对象迭代,你想找到和捕捉一个元素具有一定的ID

<div id="myDiv"> 
    <div id="fo"><div> 
    <div id="bar"><div> 
</div> 

你可以写东西喜欢找

$('#myDiv').find('#bar') 

请注意,如果您要使用类选择器,find方法将返回所有匹配的元素。

,或者你可以写一个迭代函数,将做更高级的工作

<div id="myDiv"> 
    <div id="fo"><div> 
    <div id="bar"><div> 
    <div id="fo1"><div> 
    <div id="bar1"><div> 
    <div id="fo2"><div> 
    <div id="bar2"><div> 
</div> 

$('#myDiv div').each(function() { 
    if($(this).attr('id') == 'bar1') 
     //do something with bar1 
}); 

相同的代码可以很容易地修改类选择。

<div id="myDiv"> 
    <div class="fo"><div> 
    <div class="bar"><div> 
    <div class="fo"><div> 
    <div class="bar"><div> 
    <div class="fo"><div> 
    <div class="bar"><div> 
</div> 

$('#myDiv div').each(function() { 
    if($(this).hasClass('bar')) 
     //do something with bar 
}); 

我很高兴你与指数解决您的问题(),什么都适用于你。我希望这将帮助其他有同样的问题。干杯:)

我知道它的老问题,但它仍然在顶部的谷歌的结果,新的jQuery提供.has()功能

$('.mydiv').has('#foo') 
+5

对不起,但我想你错误地解释了这个问题:[has()API](http:/ /api.jquery.com/has/)报告如下: 将匹配元素的集合减少为那些具有与选择器或DOM元素匹配的*后代*的元素。 OP询问如何测试具有类'myDiv'的元素是否也有Id foo,而has()将查找具有Id'foo'的'myDiv'的后代。 – Tilt 2014-09-30 10:37:03

检查元素的ID是存在

if ($('#id').attr('id') == 'id') 
 
{ 
 
    //OK 
 
}

你也可以通过这样做来检查id元素是否被使用:

if(typeof $(.div).attr('id') == undefined){ 
    //element has no id 
} else { 
    //element has id selector 
} 

我用这个方法对全球数据表和具体订购数据表