2013-04-16 187 views
4

鉴于以下无序列表:儿童()只选择第一个孩子

<ul class="nb"> 
    <li class="home"><a href="index.html" class="current"><span class="displace">Home</span></a></li> 
    <li class="products"><a href="products.html" title="Products"><span class="displace">Products</span></a></li> 
    <li class="services"><a href="services.html" title="Services"><span class="displace">Services</span></a></li> 
    <li class="support"><a href="support.html" title="Support"><span class="displace">Support</span></a></li> 
    <li class="company"><a href="company.html" title="Company"><span class="displace">Company</span></a></li> 
    <li class="contact"><a href="contact.html" title="Contact"><span class="displace">Contact</span></a></li> 
</ul> 

你能告诉我为什么下面只选择第一个列表项:

var status = 'closed'; 
$('ul.nb li a').click(function(e){ 
    e.preventDefault(); 
     if ($status == 'closed'){ 
      var li = $(this).closest('li'); 
      var items = li.parent().children(); 
      console.log(items.html()); 
     } 
}); 

预期结果的选择所有列表项,控制台显示 <a href="index.html" class="current"><span class="displace">Home</span></a>

TIA

+0

你有没有证实,'li.parent( )'是在做你认为应该做的事情?另外,是否有一个原因,你不会简单地做'var items = $(this).closest('ul')。children();'? –

回答

1

因为.html()没有经过jQuery对象的每个元素并且将所有的html值连接起来。它只返回第一个html值。

由于li是所有的孩子,你将不得不循环自己。喜欢的东西:

var html = ''; 
items.each(function(i, elm) { 
    html += $(elm).html(); 
}); 
1

我认为这是你在找什么...(记录每个里的HTML)

http://jsfiddle.net/Z2Rhx/

$(items).each(function() { console.log($(this).html()) }); 
+0

非常感谢! – Ragamffn

+1

'items'已经是一个jQuery对象,不需要重新包装它。 – Chad