儿童()只选择第一个孩子
问题描述:
鉴于以下无序列表:儿童()只选择第一个孩子
<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
答
html
作为getter只返回第一个选定元素的html内容,items
在你的代码中是一个jQuery包裹的数组,全部选中li
元素。 http://jsfiddle.net/MKUGv/
+0
*前拍* – Ragamffn
答
因为.html()
没有经过jQuery对象的每个元素并且将所有的html值连接起来。它只返回第一个html值。
由于li
是所有的孩子,你将不得不循环自己。喜欢的东西:
var html = '';
items.each(function(i, elm) {
html += $(elm).html();
});
答
我认为这是你在找什么...(记录每个里的HTML)
$(items).each(function() { console.log($(this).html()) });
你有没有证实,'li.parent( )'是在做你认为应该做的事情?另外,是否有一个原因,你不会简单地做'var items = $(this).closest('ul')。children();'? –