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

Nic*_*ray 91 jquery

什么是jQuery具有相当于以下语句的id?

$('#mydiv').hasClass('foo')
Run Code Online (Sandbox Code Playgroud)

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

就像是:

$('.mydiv').hasId('foo')
Run Code Online (Sandbox Code Playgroud)

Sam*_*son 164

您可以通过组合多个选择器将该逻辑烘焙到选择器中.例如,我们可以定位具有给定id的所有元素,它们也具有特定的类:

$("#foo.bar"); // Matches <div id="foo" class="bar">
Run Code Online (Sandbox Code Playgroud)

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

jQuery还有一个很好的.is方法,可以让你确定一个元素是否具有某些特质.您可以针对字符串选择器,HTML元素或其他jQuery对象测试jQuery集合.在这种情况下,我们只需对字符串选择器进行检查:

$(".bar:first").is("#foo"); // TRUE if first '.bar' in document is also '#foo'
Run Code Online (Sandbox Code Playgroud)

  • '是()`的+1.应该有一个`.hasId()`选择器,因为它似乎是`.hasClass()的明显合作伙伴`真的...... (29认同)

pro*_*son 43

我可能会使用$('.mydiv').is('#foo');那说如果你知道Id为什么你不会只是首先将它应用于选择器?

  • 也许代码进入一个需要以不同方式处理某个案例的回调函数.因此,该函数会自动传递一个带有未知属性的jQuery对象.在这种情况下,$('你的答案').是('有帮助'); (17认同)

eww*_*ink 19

更新:抱歉误解了问题,删除了.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');
Run Code Online (Sandbox Code Playgroud)
<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>
Run Code Online (Sandbox Code Playgroud)

  • 抱歉,我认为你误解了这个问题:[has()API](http://api.jquery.com/has/)报告:将匹配元素集合减少到具有与选择器匹配的*后代*的元素或DOM元素.OP正在询问如何测试具有类'myDiv'的元素是否也具有Id foo,而has()将查找具有Id'foo'的'myDiv'的后代. (5认同)

Nim*_*adi 7

假设您正在迭代某些DOM对象,并且您想要找到并捕获具有特定ID的元素

<div id="myDiv">
    <div id="fo"><div>
    <div id="bar"><div>
</div>
Run Code Online (Sandbox Code Playgroud)

你可以写一些喜欢找的东西

$('#myDiv').find('#bar')
Run Code Online (Sandbox Code Playgroud)

请注意,如果您要使用类选择器,则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
});
Run Code Online (Sandbox Code Playgroud)

可以为类选择器轻松修改相同的代码.

<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
});
Run Code Online (Sandbox Code Playgroud)

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