【问题标题】:How to select first child?如何选择第一个孩子?
【发布时间】:2011-08-16 16:25:13
【问题描述】:

如何使用第一个子选择器选择这些 div 中的第一个 div(带有id=div1 的那个)?

<div class="alldivs">
   <div class="onediv" id="div1"> 1 This one </div>
   <div class="onediv" id="div2"> 2 </div>
   <div class="onediv" id="div3"> 3 </div>
</div>

【问题讨论】:

    标签: javascript jquery children


    【解决方案1】:

    在普通的 JavaScript 中,你会使用类似的东西:

    // Single
    document.querySelector(".onediv").classList.add("red"); 
    
    // Multiple (deeply nested)
    document.querySelectorAll(".onediv:first-child").forEach(EL => EL.classList.add("red"));
    

    或者通过父元素使用Element.firstElementChild:

    // Single Parent 
    document.querySelector(".alldivs").firstElementChild.classList.add("red");
    
    // Multiple parents
    document.querySelector(".alldivs").forEach(EL => EL.firstElementChild.classList.add("red"));
    

    jQuery 获取第一个孩子

    使用:$(".onediv").eq(0)

    选择器方法的其他示例以UL内的first LI为目标:

    Syntax Type Example
    .eq() Method $("li").eq(0)
    .first() Method $("li").first()
    :eq() Selector $("li:eq(0)")
    :first Selector $("li:first")
    :first-child Selector $("li:first-child")
    :lt() Selector $("li:lt(1)")
    :nth-child() Selector $("li:nth-child(1)")
    .slice() Method $("li").slice(0,1)

    它们在深度方面的操作方式略有不同。试玩以下演示示例:

    $("select").on("change", function() {
      $("li").removeClass("red");
      new Function(`return (${this.value})`)();
    }).trigger("change");
    .red {color: red;}
    option[disabled] {font-size: 1.4em; color: blue;}
    <select>
      <option disabled>jQuery examples:</option>
    
      <option>$("li").eq(0).addClass("red")</option>
      <option>$("li:eq(0)").addClass("red")</option>
      <option>$("li").first().addClass("red")</option>
      <option>$("li:first").addClass("red")</option>
      <option>$("li:first-child").addClass("red")</option>
      <option>$("li:lt(1)").addClass("red")</option>
      <option>$("li:nth-child(1)").addClass("red")</option>
      <option>$("li").slice(0,1).addClass("red")</option>
    
      <option disabled>JavaScript examples:</option>
    
      <option>document.querySelector("li").classList.add("red")</option>
      <option>document.querySelectorAll("li:first-child").forEach(EL => EL.classList.add("red"))</option>
    
      <option disabled>Mixed jQuery + JavaScript</option>
    
      <option>$("li")[0].classList.add("red")</option>
    </select>
    
    <ul>
      <li>1</li>
      <li>2
        <ul>
          <li>2.1</li>
          <li>2.2</li>
        </ul>
      </li>
      <li>3</li>
    </ul>
    
    <script src="https://code.jquery.com/jquery-3.6.0.js"></script>

    您也可以使用[i] 从jQuery 元素集合中通过index 获取JS 元素,例如:

    $("li")[0]
    

    但现在您拥有原生 JS Element 表示,您必须使用 JavaScript 方法,例如:

    $("li")[0].classList.add("active"); // Adds class "active" to the first LI in the DOM
    

    或者你可以不要 - 这是糟糕的设计)将它包装回一个 jQuery 对象

    $( $("li")[0] ).addClass("active"); // Don't! Use .eq() instead
    

    【讨论】:

      【解决方案2】:
      $('div.alldivs :first-child');
      

      或者你可以直接引用id:

      $('#div1');
      

      按照建议,您最好使用子选择器:

      $('div.alldivs > div:first-child')
      

      如果您没有使用first-child,您可以使用:first(同样建议)或$('div.alldivs').children(0)

      【讨论】:

      • 第一个空间需要一个空格。否则它只会匹配div.alldivs 的第一个孩子的实例(如果有的话)。
      • 这将返回任何后代的每个第一个孩子,而不仅仅是这里的第一个 div。
      • $('div.alldivs > div:first-child');
      • @kennis:那行不通。这将匹配恰好是第一个孩子的任何 div。你真的想要div:first-of-type,但这显然在 jQuery 中不受支持。 (应该早点看到,但在问题中错过了。)
      【解决方案3】:

      使用:first-child 选择器。

      在你的例子中......

      $('div.alldivs div:first-child')
      

      这也将匹配任何满足选择条件的第一个子后代。

      虽然:first 只匹配一个元素,但:first-child 选择器可以匹配多个:每个父元素一个。这相当于:nth-child(1)

      对于第一个匹配,使用:first 选择器。

      或者,Felix Kling 建议使用 direct descendent selector 来获取只有直接子级...

      $('div.alldivs > div:first-child')
      

      【讨论】:

      • 这里最好使用子选择器&gt;。或者只是:$('div.alldivs').children().first(); 或类似的东西。
      【解决方案4】:

      您好,我们可以在 jQuery 中使用默认方法“first”

      这里有一些例子:

      当你想为第一个 div 添加类时

        $('.alldivs div').first().addClass('active');
      

      当您想更改删除“onediv”类并仅添加到第一个孩子时

         $('.alldivs div').removeClass('onediv').first().addClass('onediv');
      

      【讨论】:

        【解决方案5】:

        正如@Roko 所说,您可以通过多种方式做到这一点。

        1.使用jQuery first-child selector - SnoopCode

           $(document).ready(function(){
            $(".alldivs onediv:first-child").css("background-color","yellow");
                }
        
        1. 使用jQuery eq Selector - SnoopCode

           $( "body" ).find( "onediv" ).eq(1).addClass( "red" );
          
        2. 使用jQuery Id Selector - SnoopCode

             $(document).ready(function(){
               $("#div1").css("background-color: red;");
             });
          

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2022-06-28
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-02-26
          • 1970-01-01
          • 1970-01-01
          • 2023-03-16
          相关资源
          最近更新 更多