我正在创建脚本,将在每个无序列表的列表元素中添加,,但最后一个列表元素除外 - 它应以; 结尾。这应该发生在每个无序列表中!
就像......
<ul>
<li>a</li>
<li>b</li>
<li>c</li>
</ul>
<ul>
<li>d</li>
<li>e</li>
<li>f</li>
</ul>
...为:
<ul>
<li>a,</li>
<li>b,</li>
<li>c;</li>
</ul>
<ul>
<li>d,</li>
<li>e,</li>
<li>f;</li>
</ul>
我的代码目前看起来像这样......
$('ul').each(function(i) {
var listsLength = $(this + 'li').length;
$(this + 'li').each(function(j) {
if (i == (listsLength - 1)) {
$(this).append(';');
} else {
$(this).append(',');
}
});
}
我认为这个问题就是这个代码...
$( this + 'li' )
知道如何获得同样的效果吗?
修改
修正了它。实际上还存在语法错误,我还使用了 i ,其中应放置 j 。现在一切正常,这里是the outcome。
编辑#2:
只需使用@lonesomeday代码......它可读性和轻量级!
答案 0 :(得分:6)
你不能this + 'li'
。在此上下文中,this
是DOM元素,而不是字符串。要获得所需的效果,您需要$(this).find('li')
。
您的循环也是不必要的。您可以使用:last-child
做更好的事情:
$('ul li:last-child').append(';');
$('ul li:not(:last-child)').append(',');
这两行会产生你想要的效果。
答案 1 :(得分:3)
而不是$( this + 'li' )
做$( 'li', this )
答案 2 :(得分:1)
this + 'li'
会尝试将this
转换为字符串,然后将'li'
连接到它。
请改为尝试:
$('li', this)
答案 3 :(得分:0)
您可以使用
$(this).find ('>li').each(...)
相反(如果问题确实在这里)。