1

我的清单目前的结构如下:

<ul id="list-items">
  <li class="cat">
    <a href="#">Cat #1</a>
    (2)
    <ul class="children">
      <li class="child-cat">
        <a title="#">Sub cat #1</a>
        (1)
      </li>
    </ul>
  </li>

  <li class="cat">
    <a href="#">Cat #2</a>
    (2)
    <ul class="children">
      <li class="child-cat">
        <a title="#">Sub cat #2</a>
        (1)
      </li>
    </ul>
  </li>
</ul>

我想在锚标签后的括号内获取数字。所以我这样做了:

jQuery('#list-items li').each(function() {
     b = jQuery(this).first().contents().filter(function() {
        return this.nodeType == 3;
        }).text();
});

对于我的最后一项任务,我需要将上述输出附加到每个列表项的锚标记。所以我尝试了这个:

var b = [];
jQuery('#list-items li').each(function() {
    b = jQuery(this).first().contents().filter(function() {
        return this.nodeType == 3;
        }).text();
});

jQuery('#list-items li a').append(function(i) {
    jQuery(this).append(b[i]);
});

这似乎行不通。而且我不知道为什么.. 任何人都可以帮我修改我的脚本吗?谢谢。

4

1 回答 1

1

一个简单的解决方案

jQuery('#list-items li > a').append(function() {
    var next = this.nextSibling;
    if(next){
        return $.trim($(next).text())
    }
});

演示:小提琴

如果你想创建数组b,我会推荐.map()而不是.each()

var b = jQuery('#list-items li a').map(function() {
    var next = this.nextSibling;
    if(next){
        return $.trim($(next).text())
    }
});

jQuery('#list-items li a').append(function(i) {
    jQuery(this).append(b[i]);
});

演示:小提琴

您的代码的问题是,在第一个 each 循环中,您覆盖了b, 而不是将值添加到数组b

var b = [];
jQuery('#list-items li').each(function() {
    b.push(jQuery(this).first().contents().filter(function() {
        return this.nodeType == 3;
        }).text());
});

jQuery('#list-items li a').append(function(i) {
    jQuery(this).append($.trim(b[i]));
});

演示:小提琴

于 2013-09-13T06:17:56.963 回答