2016-08-03 69 views
0

我有一個HTML文件中像這樣:顯示嵌套UL裏的第一級子使用jQuery

JS:

function functionName(event) { 
    event.stopPropagation(); 
    var item = event.data.param; 
    document.getElementById("list").innerHTML = item; 
} 

$(document).ready(function() { 
    $("li").each(function() { 
    $(this).on('click', {param: this.id}, functionName); 
}); 
}); 

HTML:

<div id="main"> 
<div id="tree"> 
<ul class="xyz"> 
    <li class="hide">AVC</li> 
    <li class="hide">Anna</li> 
    <li class="hide">Peter</li> 
    <li id="foo1">Gary 
    <ul class="xyz"> 
    <li class="hide">John</li> 
    <li class="hide">Anna</li> 
    <li id="foo2">Briton 
    <ul class="xyz"> 
     <li class="hide">gg</li> 
     <li class="hide">hh</li> 
     <li id="foo3">Layla 
     <ul class="xyz"> 
      <li class="hide">gg</li> 
      <li class="hide">hh</li> 
      <li id="foo4">Undertaker 
      <ul class="xyz"> 
      <li class="hide">gg</li> 
      <li class="hide">hh</li> 
      </ul> 
      </li> 
     </ul> 
     </li> 
    </ul> 
    </li> 
    </ul> 
    </li> 
    </ul> 
    </div> 

    <div id="list"></div> 

    </div> 

我有兩個div標籤,其ID是接受treelist。 Tree div包含嵌套的ul li標籤,每個li都有唯一的標識。

我想顯示一個ul li標記的第一級子女。例如,當我點擊Gary時,它應該在右邊的div i.e. list中顯示一級子女(John, Anna, Britton)。

現在我可以在list div中獲得ul li元素的ID,點擊任何項目。

如何使用jquery/javascript遍歷點擊元素的一級子元素並在list div中顯示它們?

感謝

回答

1

嘗試使用find()> ul選擇嫡系

$('li[id^="foo"]').click(function(e){ 
e.stopPropagation(); 
var x = $(this).last().find(' > ul').clone().find('ul').remove().end(); 
console.log(x[0]) 
$('#list').html(x); 
$('#list .hide').show(); 
}); 

簡單的演示:https://jsfiddle.net/sk30mwud/4/

+0

沒有這樣的。我能夠做你說的這件事。我想將'tree' div的點擊項目的子項顯示給'list' div。我正在嘗試使用html和jquery/javascript創建樹列表視圖。 – CLIX159

+0

你的意思是這樣的:https://jsfiddle.net/sk30mwud/1/? – madalinivascu

+0

是這樣的,但正如你可以看到一些孩子隱藏在我的HTML文件。我想在這裏看到他們。 – CLIX159

1
'$('#tree').on('click', 'li', function(){ 
    $(this).find('> ul > li').toggleClass('hide'); 
    return false; 
})' 
+0

相同:$(this).children('ul')。children('li'); –

1

能否請您看看這個方法:

它使用.contents().get(0).nodeValue獲取存在於子節點li中的文本,而不是從它的childerns中獲取文本(如果有的話)。

function functionName(event) { 
 
    event.stopPropagation(); 
 
    var item = event.data.param; 
 
    var names = []; 
 

 
    $("#" + item).children("ul").children("li").each(function() { 
 

 
    names.push($(this).contents().get(0).nodeValue); 
 
    }); 
 

 
    $("#list").text(names.join(","));; 
 
} 
 

 
$(document).ready(function() { 
 
    $("li").each(function() { 
 
    $(this).on('click', { 
 
     param: this.id 
 
    }, functionName); 
 
    }); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script> 
 
<div id="main"> 
 
    <div id="tree"> 
 
    <ul class="xyz"> 
 
     <li class="hide">AVC</li> 
 
     <li class="hide">Anna</li> 
 
     <li class="hide">Peter</li> 
 
     <li id="foo1">Gary 
 
     <ul class="xyz"> 
 
      <li class="hide">John</li> 
 
      <li class="hide">Anna</li> 
 
      <li id="foo2">Briton 
 
      <ul class="xyz"> 
 
       <li class="hide">gg</li> 
 
       <li class="hide">hh</li> 
 
       <li id="foo3">Layla 
 
       <ul class="xyz"> 
 
        <li class="hide">gg</li> 
 
        <li class="hide">hh</li> 
 
        <li id="foo4">Undertaker 
 
        <ul class="xyz"> 
 
         <li class="hide">gg</li> 
 
         <li class="hide">hh</li> 
 
        </ul> 
 
        </li> 
 
       </ul> 
 
       </li> 
 
      </ul> 
 
      </li> 
 
     </ul> 
 
     </li> 
 
    </ul> 
 
    </div> 
 

 
    <div id="list"></div> 
 

 
</div>

相關問題