jQuery确定匹配的类是否具有给定的id

时间:2010-02-12 16:45:50

标签: jquery

什么是jQuery具有与以下语句等效的id?

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

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

类似的东西:

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

8 个答案:

答案 0 :(得分:157)

您可以通过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'

答案 1 :(得分:43)

我可能会使用$('.mydiv').is('#foo');那说如果你知道Id为什么你不能在第一时间将它应用到选择器?

答案 2 :(得分:18)

更新:抱歉误解了这个问题,删除了.has()回答。

另一种替代方法,创建.hasId()插件

// the plugin
$.fn.hasId = function(id) {
  return this.attr('id') == id;
};

// select first class
$('.mydiv').hasId('foo') ?
  console.log('yes') : console.log('no');

// select second class
// $('.mydiv').eq(1).hasId('foo')
// or
$('.mydiv:eq(1)').hasId('foo') ?
  console.log('yes') : console.log('no');
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<div class="mydiv" id="foo"></div>
<div class="mydiv"></div>

答案 3 :(得分:7)

假设您正在迭代某些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
});

我很高兴你用index()解决了你的问题,什么对你有用。我希望这会帮助其他人解决同样的问题。干杯:)

答案 4 :(得分:4)

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

答案 5 :(得分:4)

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

其他似乎没有用。

因此,对于兄弟元素,如果您首先通过公共类进行选择,然后想要针对每个特定类修改某些内容,那么这是一个很好的解决方法。

编辑:对于那些不知道的人(像我一样),index()给出了与选择器匹配的每个元素的索引值,从0开始计算,具体取决于它们在DOM中的顺序。只要您知道class =“foo”有多少元素,就不需要id。

显然这并不总是有帮助,但有人可能觉得它很有用。

答案 6 :(得分:3)

检查元素的ID是否存在

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

答案 7 :(得分:1)

您还可以通过执行以下操作来检查是否使用了id元素:

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

我将此方法用于全局dataTables和特定的有序dataTables