JQuery обход неупорядоченного списка / дерева

0

Я в основном использую плагин jquery treeview http://bassistance.de/jquery-plugins/jquery-plugin-treeview/, который не имеет функции поиска - я решил это, но как только я найду элемент, я также должен открыть весь древовидный вид - и что я могу сделать, только пересекая дерево. Итак, следующая проблема:

Допустим, у меня есть следующий UL

<ul id="mainlist" class="level1">
  <li>
      <div class="hitarea a1"></div>
      <div class="b1"></div>
  </li>
  <li>
      <div class="hitarea a2"></div>
      <div class="b1"></div>
  </li>
  <li>
     <div class="hitarea a3"></div>
     <div class="b1"></div>
     <ul class="level3">
       <li>
          <div class="hitarea a4"></div>
          <div class="b1"></div>
          <ul class="level2">
             <li>
               <div class="hitarea a5"></div>
               <div class="b1"></div>
             </li>
             <li>
               <div class="hitarea a6"></div>
              <div class="b1"></div>
            </li>
            <li>
              <div class="hitarea a7"></div>
              <div class="b1"></div>
            </li>
         </ul>
       </li>
       <li>
          <div class="hitarea a8"></div>
          <div class="b1"></div>
       </li>
       <li>
          <div class="hitarea a9"></div>
          <div class="b1"></div>
       </li>
    </ul>
  </li>
</ul>

Я хочу следующее:

если я нажму на div с классом "hitarea a5", я хочу получить все предыдущие элементы (div) с классом "hitarea" - чтобы я мог вручную применить.click(), чтобы открыть их. Это будет следующее:

  1. hitarea a4
  2. hitarea a3

При следующем я получаю только первый предыдущий (hitarea a4):

   $("#mainlist .a5").parent().prev('.hitarea')

Но я хочу, чтобы все предыдущие a4 и a3.... до тех пор, пока не будет достигнут корень UL.

prevAll тоже не помогает.

========================== Решение ======================= =================

Для всех, кто ищет функциональность поиска в плагине древовидного jquery (http://bassistance.de/jquery-plugins/jquery-plugin-treeview/), здесь следующий вклад от меня к сообществу с открытым исходным кодом (@arun-p- johny). Возможно, они захотят включить это в код так или иначе:

<style>
#search-bottom-div {
z-index: 999;
position: absolute;
background: #FFF;
padding: 5px;
width: 220px;
border: 1px solid #CCC;
left: 125;
top: 27;
min-height: 50px;
display: none;
color: #000;
}
</style>

<div style="float:left;">
     <input placeholder="Suchen" id="searchtreeitem" name="searchtreeitem"/>    
</div>
<div id="search-bottom-div">
    <div id="search-bottom-div-content"></div>
    <div id="search-bottom-div-close" style="text-align:right;text-decoration:underline;cursor:pointer;"><br/><br/>Close</div>
</div>  




$('#searchtreeitem').keyup(function(e) {  
        textval = $(this).val();
        $("#search-bottom-div-content").empty();
        $("#search-bottom-div").show();

        foundItems = $("#mainList").find("span:Contains("+textval+")");

        $.each(foundItems, function(index, value) {         
            $("#search-bottom-div-content").append($(value).clone()).append("<br/>");
        });

     });

    $("#search-bottom-div-content span").live( "click", function() {
        foundClass = $(this).attr("class");
        $("#mainList ."+foundClass).click();

        var $this = $("#mainList ."+foundClass);
        $lis = $this.parentsUntil('#mainList', 'li');
        $hitareas = $lis.children('.hitarea').not(this);

        $.each($hitareas, function(index, value) {
            if($(value).next('.orgeinhItem').find('.toporg').length == 0){
                $(value).click();
            }           
        });

        $("#searchtreeitem").val("");
        $("#search-bottom-div").hide();
    });

    $("#search-bottom-div-close").live( "click", function() {
        $("#searchtreeitem").val("");
        $("#search-bottom-div").hide();
    }); 

    jQuery.expr[':'].Contains = function(a, i, m) { 
          return jQuery(a).text().toUpperCase().indexOf(m[3].toUpperCase()) >= 0; 
        };
  • 0
    Является ли это то , что вы имеете в виду?
Теги:
treeview
tree-traversal
html-lists

1 ответ

2
Лучший ответ

Пытаться

jQuery(function () {
    $('.hitarea').click(function () {
        var $this = $(this),
            //find all li element between the clicked hitarea and the root ul
            $lis = $this.parentsUntil('#mainlist', 'li'),
            //find all hitarea elements in those li elements excludint the clicked hitaread
            $hitareas = $lis.children('.hitarea').not(this);

        //create an array which contains the class attribute values of hitareas
        var classes = $hitareas.map(function () {
            return this.className
        }).get();
        console.log(classes)
    })
})

Демо: скрипка

  • 0
    Превосходно !! Спасибо, это сработало прямо из коробки :-)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню