jQuery中的关键字+ DOM元素

时间:2011-05-19 17:25:44

标签: jquery jquery-selectors

我正在创建脚本,将在每个无序列表的列表元素中添加,但最后一个列表元素除外 - 它应以; 结尾。这应该发生在每个无序列表中!

就像......

<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代码......它可读性和轻量级!

4 个答案:

答案 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(...)

相反(如果问题确实在这里)。