2013-06-27 3 views
0

Я делаю образец «вид дерева» плагин на JQuery (домашнее задание), но я с немного проблема: вот код:Нажмите цепочки JQuery

(function($){ 
    $.fn.TreeView = function() { 
     $("ul li").children().css("display","none"); 

     $("li").on("click", function() { 
       $(this).siblings().find("*").css("display", "none");  
       $(this).children().css("display", "block"); 
       $(this).children().children().css("display", "block"); 
       console.log($(this).children()[0]); 

     }); 

     $(this).on("mouseover", function() { 
      $(".hover").removeClass("hover"); 
      $(this).addClass("hover"); 
     }); 

     $(this).on("mouseout", function() { 
      $(this).removeClass("hover"); 
     }); 

     $("li").css("cursor", "pointer"); 

     return this;  
    }; 
}(jQuery)); 

образец HTML частично:

<ul id="example-ul"> 
     <li> Item 1 
     </li> 
     <li> Item 2 
      <ul> 
       <li> Item 2.1 </li> 
       <li> Item 2.2 
        <ul> 
         <li> Item 2.2.1 </li> 
         <li> Item 2.2.2 
          <ul> 
           <li> Item 2.2.2.1 </li> 
           <li> Item 2.2.2.2 
            <ul id="asd"> 
             <li> Item 2.2.2.2.1 </li> 
            </ul> 
           </li> 
          </ul> 
         </li> 
        </ul> 
       </li> 
      </ul> 
     </li> 
     <li> 
     Item 3 

      <ul> 
       <li> Item 3.1 
        <ul> 
         <li> Item 3.3.1 </li> 
        </ul> 
       </li> 
       <li> Item 3.2 </li> 
      </ul> 
     </li> 
    </ul> 
    <!-- scripts --> 

    <script src="js/jquery.js"></script> 
    <script src="js/script.js"></script> 
    <script> 
     //Example 
     $("#example-ul").TreeView();  
    </script> 

поэтому проблема, с которой я столкнулся, - это «цепочка» на клике, я хочу отображать только дочерние элементы (на консоли), но при каждом нажатии я получаю «предыдущие» дочерние элементы и новый - я хочу визуализировать только текущие.

+0

Так, например, если вы нажмете на пункт 2.2.2, вы хотите увидеть только пункт 2.2.2, пункт 2.2 и пункт 2? НЕ Пункты 2.2.1, пункт 2.1 и пункт 1, хотя они семантически организованы как братья и сестры или родительские братья и сестры? – oooyaya

+0

Нет, я хочу, например, (Пункт 2.2.2), чтобы увидеть только Пункт 2.2.2.1 –

+0

Итак, вы хотите расширить только внутренний предмет, не расширяя родителей? – oooyaya

ответ

4

Я думаю, что вы ищете, чтобы остановить распространение события. Это можно сделать, добавив следующий код в обработчик события evt.stopPropagation(). С этой модификации ваш обработчик щелчка будет:

... 
    $("li").on("click", function (evt) { 
     $(this).siblings().find("*").css("display", "none"); 
     $(this).children().css("display", "block"); 
     $(this).children().children().css("display", "block"); 
     console.log($(this).children()[0]); 
     evt.stopPropagation(); 
    }); 
    ... 

Вот fiddle для модификации.

+0

OHHH! Он хочет видеть только внутреннее большинство детей в CONSOLE. Я думал, что он/она должен отображать на экране. – oooyaya

+0

Именно этого я и ищу. Я скоро выберу ваш ответ. –