2016-12-28 44 views
2

我在點擊一個對象旁邊隱藏每個兄弟對象時遇到了一些麻煩。 簡單$(".hider").hide();不適合我的工作,因爲我有多個對象,我只是想隱藏那些兄弟姐妹旁邊點擊一個,其他的需要來獲取hider類,因此用戶不能與它再次進行互動。jQuery - .on(「click」)隱藏每個兄弟對象

$(document).on('click', '.hider', function() { 
 
    console.log("clicked"); 
 
    var obj = $(this); 
 
    obj.parent("ul").children("span.hider").each(function() { 
 
    $(this).removeClass("hider"); 
 
    console.log($(this)); 
 
    }); 
 
});
.c-pointer { 
 
    cursor: pointer; 
 
} 
 
li a span { 
 
    color: red 
 
} 
 
li a span.hider { 
 
    color: #000 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div class="emoticon"> 
 
    <div class="sb-social"> 
 
    <ul class="c-default"> 
 
     <!-- --> 
 
     <li class="enabled"> 
 
     <a class="c-pointer"> 
 
      <span class="hider">Click on me to hide All</span> 
 
     </a> 
 
     </li> 
 
     <!-- --> 
 
     <li class="enabled"> 
 
     <a class="c-pointer"> 
 
      <span class="hider">Click on me to hide All</span> 
 
     </a> 
 
     </li> 
 
     <!-- --> 
 
     <li class="enabled"> 
 
     <a class="c-pointer"> 
 
      <span class="hider">Click on me to hide All</span> 
 
     </a> 
 
     </li> 
 
     <!-- --> 
 
     <li class="enabled"> 
 
     <a class="c-pointer"> 
 
      <span class="hider">Click on me to hide All</span> 
 
     </a> 
 
     </li> 
 
     <!-- --> 
 
     <li class="enabled"> 
 
     <a class="c-pointer"> 
 
      <span class="hider">Click on me to hide All</span> 
 
     </a> 
 
     </li> 
 
     <!-- --> 
 
    </ul> 
 
    </div> 
 
</div> 
 
<!-- --> 
 
<hr/> 
 
<!-- --> 
 
<div class="emoticon"> 
 
    <div class="sb-social"> 
 
    <ul class="c-default"> 
 
     <!-- --> 
 
     <li class="enabled"> 
 
     <a class="c-pointer"> 
 
      <span class="hider">Click on me to hide All</span> 
 
     </a> 
 
     </li> 
 
     <!-- --> 
 
     <li class="enabled"> 
 
     <a class="c-pointer"> 
 
      <span class="hider">Click on me to hide All</span> 
 
     </a> 
 
     </li> 
 
     <!-- --> 
 
     <li class="enabled"> 
 
     <a class="c-pointer"> 
 
      <span class="hider">Click on me to hide All</span> 
 
     </a> 
 
     </li> 
 
     <!-- --> 
 
     <li class="enabled"> 
 
     <a class="c-pointer"> 
 
      <span class="hider">Click on me to hide All</span> 
 
     </a> 
 
     </li> 
 
     <!-- --> 
 
     <li class="enabled"> 
 
     <a class="c-pointer"> 
 
      <span class="hider">Click on me to hide All</span> 
 
     </a> 
 
     </li> 
 
     <!-- --> 
 
    </ul> 
 
    </div> 
 
</div> 
 
<!-- --> 
 
<hr/> 
 
<!-- --> 
 
<div class="emoticon"> 
 
    <div class="sb-social"> 
 
    <ul class="c-default"> 
 
     <!-- --> 
 
     <li class="enabled"> 
 
     <a class="c-pointer"> 
 
      <span class="hider">Click on me to hide All</span> 
 
     </a> 
 
     </li> 
 
     <!-- --> 
 
     <li class="enabled"> 
 
     <a class="c-pointer"> 
 
      <span class="hider">Click on me to hide All</span> 
 
     </a> 
 
     </li> 
 
     <!-- --> 
 
     <li class="enabled"> 
 
     <a class="c-pointer"> 
 
      <span class="hider">Click on me to hide All</span> 
 
     </a> 
 
     </li> 
 
     <!-- --> 
 
     <li class="enabled"> 
 
     <a class="c-pointer"> 
 
      <span class="hider">Click on me to hide All</span> 
 
     </a> 
 
     </li> 
 
     <!-- --> 
 
     <li class="enabled"> 
 
     <a class="c-pointer"> 
 
      <span class="hider">Click on me to hide All</span> 
 
     </a> 
 
     </li> 
 
     <!-- --> 
 
    </ul> 
 
    </div> 
 
</div> 
 
<!-- --> 
 
<hr/>

有誰經歷過嗎?

jsFiddle here

+0

點擊後的兄弟姐妹或元素? –

+1

** obj.closest( 「UL」)找到( 「span.hider」)removeClass( 「藏起來」); **通過所有跨度無需環路試試這個 – Curiousdev

+0

嘗試'parents',而不是'parent'和'find',而不是'children'這樣的:'obj.parents( 「UL」)找到( 「span.hider」)removeClass( '藏起來');' –

回答

2

你必須與你的代碼一對夫婦的問題。首先,.parent()只能找到直接的父元素,而你的ul在層次結構中要高得多。你可以使用.parents()來代替。其次,你不會想出於同樣的原因使用孩子,反而會找到工作。正如@Igor建議的那樣,你也可以使用.not(obj)來過濾列表而不是條件。

obj.parents("ul").find("span.hider").not(obj).each(function(i, e) { 
    $(e).removeClass("hider");  
}); 

您也可以使用obj.siblings()來獲取其直接的兄弟姐妹,但是這不會對跨度的工作,因爲它沒有兄弟姐妹。

我已經用一個工作示例更新了您的jsfiddle。

https://jsfiddle.net/oqgzkw3p/3/

編輯:不是從@Igor增加。

+0

謝謝。也真棒解釋! –

+0

當然!而作爲@Igor還指出,你可以使用.removeClass代替。每次,但是如果你需要對元素進行其他操作,則是。每次你的方法。 – Jonneh

0
$(document).on('click', '.hider', function() { 
    console.log("clicked"); 
    var obj = $(this); 
    obj.siblings().hide() //You can use hide, or addClass('hider') or whatever you want 
} 
+0

謝謝你,但因爲它應該不起作用。最後一行你會錯過''''。 –

3
$(document).on('click', '.hider', function() { 
    var obj = $(this); 
    obj.closest("ul.c-default").find(".hider").not(obj).removeClass("hider"); 
});