2015-09-30 73 views
0

我得到這個HTML:不能選擇孩子

   <ul> 
       <a href="#"><li>Test</li></a> 
       <a href="#"><li>Test2</li></a> 
       <a href="#" class="with-sub"><li>Test3</li> 
        <ul class="sub"> 
         <li><a href="#">Sub1</a></li> 
         <li><a href="#">Sub2</a></li> 
         <li><a href="#">Sub3</a></li> 
        </ul> 
       </a> 
      </ul> 

和jQuery:

<script src="//code.jquery.com/jquery-2.1.4.min.js"></script> 
<script> 
    $(document).ready(function() { 
     $(".sub").hide(); 
    }); 
    $(".with-sub").click(function() { 
     $(this).find(".sub").slideDown("slow", function() { 

     }); 
    }); 
</script> 

當我點擊該鏈接的「與子」級沒有任何反應。

回答

4

您可以將HTML和jQuery更改爲以下幾點:

$(".with-sub").click(function() { 
 
    $(this).next("ul").slideDown(); 
 
});
.sub { 
 
    display: none; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<ul> 
 
    <a href="#"> 
 
    <li>Test</li> 
 
    </a> 
 
    <a href="#"> 
 
    <li>Test2</li> 
 
    </a> 
 
    <a href="#" class="with-sub"> 
 
    <li>Test3 
 
     <ul class="sub"> 
 
     <li><a href="#">Sub1</a> 
 

 
     </li> 
 
     <li><a href="#">Sub2</a> 
 

 
     </li> 
 
     <li><a href="#">Sub3</a> 
 

 
     </li> 
 
     </ul> 
 
    </li> 
 
    </a> 
 
</ul>

正如在評論中提到你的html是不正確的。 ul元素可以包含零個或多個元素,最終與olul元素混合。

$(".with-sub").click(function() { 
 
    $(this).find("ul").toggle(); 
 
});
.sub { 
 
    display: none; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<ul> 
 
    <li> 
 
    <a href="#">Test</a> 
 
    </li> 
 
    <li> 
 
    <a href="#">Test2</a> 
 
    </li> 
 
    <li class="with-sub"><a href="#">Test3</a> 
 
    <ul class="sub"> 
 
     <li> 
 
     <a href="#">Sub1</a> 
 
     </li> 
 
     <li> 
 
     <a href="#">Sub2</a> 
 
     </li> 
 
     <li> 
 
     <a href="#">Sub3</a> 
 
     </li> 
 
    </ul> 
 
    </li> 
 
</ul>

+0

你能解釋downvote嗎? –

+0

這不是我的downvote。 – MuchaZ

+0

@MuchaZ很高興我幫你。如果這個答案解決了你的問題,請不要忘記標記爲正確的:) –

3

您當前的代碼不起作用,因爲您試圖將事件綁定到DOM中不存在的元素,您需要將click()處理程序放入DOMReady處理程序中。

另請注意,您的HTML無效 - 只有li元素可以是ul元素的直接後代。試試這個:

<ul> 
    <li> 
     <a href="#">Test</a> 
    </li> 
    <li> 
     <a href="#">Test2</a> 
    </li> 
    <li> 
     <a href="#" class="with-sub">Test3</a> 
     <ul class="sub"> 
      <li> 
       <a href="#">Sub1</a> 
      </li> 
      <li> 
       <a href="#">Sub2</a> 
      </li> 
      <li> 
       <a href="#">Sub3</a> 
      </li> 
     </ul> 
    </li> 
</ul> 

一旦你定你的HTML,以下jQuery將工作:

$(document).ready(function() { 
    $(".sub").hide(); 
    $(".with-sub").click(function() { 
     $(this).siblings(".sub").slideDown("slow"); 
    }); 
}); 

Working example

+0

而且我也給你推薦'.SUB {顯示:無; }'在CSS – Tushar

+0

仍然不起作用。 – MuchaZ

+0

@Tushar好點,謝謝 –