簡體   English   中英

當包含特定類時,在DOM中隱藏元素

[英]Hide an element in DOM when specific class included

當html代碼中間包含特定類時,我需要從DOM中隱藏div。 請看這個例子。

<body>
 <div class="first-group">
  <h1>Hello world</h1>
 </div>

 <div class="wrapper">
  <div class="second-group">
    <div class="main">
      <div class="small">
        <span class="text-block">Hello mars</span>
      </div>
    </div>
  </div>
 </div>

</body>

我試圖用jQuery .closest()實現這一點,但是沒有運氣。

$( ".text-block" ).closest( ".first-group" ).css( "color", "red" );

有什么辦法嗎?

 if($(".second-group span").hasClass("text-block")) { $('.first-group').css('display', "none"); } 
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <body> <div class="first-group"> <h1>Hello world</h1> </div> <div class="wrapper"> <div class="second-group"> <div class="main"> <div class="small"> <span class="text-block">Hello mars</span> </div> </div> </div> </div> </body> 

如果包裝器內.text-block的長度大於0,則只需簡單地使.first-group display: none

 if($( ".wrapper" ).find( ".text-block" ).length > 0){ $('.first-group').css( "display", "none" ) } 
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <div class="first-group"> <h1>Hello world</h1> </div> <div class="wrapper"> <div class="second-group"> <div class="main"> <div class="small"> <span class="text-block">Hello mars</span> </div> </div> </div> </div> 

如果您有多個.wrapper .first-group.wrapper則只需循環包裝器並找到其父級和該父級的上一個元素。

 $( ".wrapper" ).find( ".text-block" ).each(function() { $(this).parents('.wrapper').prev('.first-group').css( "display", "none" ); }) 
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <div class="first-group"> <h1>Hello world</h1> </div> <div class="wrapper"> <div class="second-group"> <div class="main"> <div class="small"> <span class="text-block">Hello mars</span> </div> </div> </div> </div> <div class="first-group"> <h1>Hello world</h1> </div> <div class="wrapper"> <div class="second-group"> <div class="main"> <div class="small"> <span class="text-block">Hello mars</span> </div> </div> </div> </div> 

您的基本問題是, closest()尋找祖先。 .text-block不是.first-group的后代。 使用prev()查找包含塊的上一個同級。

根據您的意見, 如果有中間兄弟姐妹,則prevAll可以使用。 我在示例中添加了一些空的divs進行演示。 我需要檢查一些附帶情況。

為了使此功能更強大,我使用了prevUntil來限制同級選擇,並結合prev來查找實際感興趣的元素。

 $( ".text-block" ).closest( ".wrapper" ).prevUntil(".first-group").prev().hide(); 
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <body> <!-- This Won't Show --> <div class="first-group"> <h1>Hello world</h1> </div> <div></div><div></div> <div class="wrapper"> <div class="second-group"> <div class="main"> <div class="small"> <span class="text-block">Hello mars</span> </div> </div> </div> </div> <!--This Will Show--> <div class="first-group"> <h1>Hello world, Again</h1> </div> <div></div><div></div> <div class="wrapper"> <div class="second-group"> <div class="main"> <div class="small"> <span class="not-text-block">Hello jupiter</span> </div> </div> </div> </div> <!-- This Won't Show --> <div class="first-group"> <h1>Hello world</h1> </div> <div></div><div></div> <div class="wrapper"> <div class="second-group"> <div class="main"> <div class="small"> <span class="text-block">Hello mars</span> </div> </div> </div> </div> <!--This Will Show--> <div class="first-group"> <h1>Hello world, Again</h1> </div> <div></div><div></div> <div class="wrapper"> <div class="second-group"> <div class="main"> <div class="small"> <span class="not-text-block">Hello jupiter</span> </div> </div> </div> </div> </body> 

注意如果您更改HTML結構,這將中斷。

當.first-group在.wrapper div之外時,最接近的使用只會尋找其祖先。

在下面的代碼中,我們找到元素的祖先,然后使用prev()獲取類為.first-group的前一個元素

 $(this).closest("div.wrapper").prev(".first-group").css('display', 'none');

看看是否可行。

您可以嘗試使用parents()siblings() ,如下所示:

 $(".text-block").parents('.wrapper').siblings('.first-group').css( "color", "red" ); 
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <body> <div class="first-group"> <h1>Hello world</h1> </div> <div class="wrapper"> <div class="second-group"> <div class="main"> <div class="small"> <span class="text-block">Hello mars</span> </div> </div> </div> </div> </body> 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM