代码之家  ›  专栏  ›  技术社区  ›  Nicholas Murray

jquery确定匹配的类是否具有给定的ID

  •  90
  • Nicholas Murray  · 技术社区  · 15 年前

    jquery的id等同于以下语句是什么?

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

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

    类似:

    $('.mydiv').hasId('foo')
    
    8 回复  |  直到 6 年前
        1
  •  155
  •   Sampson    12 年前

    您可以通过以下方式将该逻辑烘焙到选择器中: 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'
    
        2
  •  43
  •   prodigitalson    12 年前

    我可能会用 $('.mydiv').is('#foo'); 那就是说,如果你知道这个ID,为什么不先把它应用到选择器上呢?

        3
  •  18
  •   ewwink    6 年前

    更新:抱歉,误解了问题,已删除 .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>
        4
  •  7
  •   Nima Foladi    9 年前

    假设您正在迭代一些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()解决了你的问题,我希望这能帮助其他人解决同样的问题。干杯:

        5
  •  4
  •   Pointy    15 年前
    $('#' + theMysteryId + '.someClass').each(function() { /* do stuff */ });
    
        6
  •  4
  •   Stella    14 年前

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

    似乎没有别的办法。

    所以对于兄弟元素来说,如果您首先选择一个公共类,然后想为每个特定类修改不同的内容,那么这是一个很好的解决方法。

    edit:对于那些不知道(像我一样)的人,index()为每个与选择器匹配的元素提供一个索引值,从0开始计算,这取决于它们在DOM中的顺序。只要知道class=“foo”有多少个元素,就不需要ID。

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

        7
  •  3
  •   Việt Anh    10 年前

    检查元素的ID是否存在

    if ($('#id').attr('id') == 'id')
    {
      //OK
    }
        8
  •  1
  •   user3379167    8 年前

    您还可以通过这样做来检查ID元素是否被使用:

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

    我将此方法用于全局数据表和特定的有序数据表