3
<nav>
    <section>
        <aside>
    <div class="findthis">111111</div>
    <div class="findthis">222222</div>
    <div class="findthis">333333</div>  
    <div class="findthis">444444</div>
        </aside>
    </section>
</nav>


$('.findthis').each( function(){
      var index = $(this).index()+1;
      $(this).append(" ( this element = "+index+" )")
});

这是有效的!( http://jsfiddle.net/3c5TZ/ )

但是....当我这样做/插入更多这样的HTML标签时...

<nav>
    <section>
        <aside>
    <div class="findthis">111111</div>
            <h2><h2>
    <div class="findthis">222222</div>
            <span></span>
    <div class="findthis">333333</div>
            <b></b>                          
    <div class="findthis">444444</div>
        </aside>
    </section>
</nav>

它失败!( http://jsfiddle.net/3c5TZ/1/ )

有任何想法吗?

4

5 回答 5

5

索引传递给.each()您不必重新发明轮子的方法:

$('.findthis').each( function(index){
    $(this).append(" ( this element = " + (index + 1) + " )")
});

更新了小提琴

于 2012-02-21T14:13:44.910 回答
4

请查阅. index()在您的示例中,jQuery 无法真正知道您正在寻找什么样的索引,相对于什么?

一种方法是提供选择器.index()

$('.findthis').each( function(){
      var index = $(this).index('.findthis')+1;
      $(this).append(" ( this element = "+index+" )")
});

jsFiddle 演示

另一种(在这种情况下可能更有效)方法是index()在整个集合上运行,并将元素作为参数传递:

var $collection = $('.findthis');
$collection.each( function(){
      var index = $collection.index(this)+1;
      $(this).append(" ( this element = "+index+" )")
});

jsFiddle 演示

于 2012-02-21T14:09:52.660 回答
3

您不小心将元素嵌套在彼此内部。

改变这个:

<h2><h2>

对此:

<h2></h2>

然后它工作得很好。演示:http: //jsfiddle.net/Guffa/3c5TZ/14/

于 2012-02-21T14:12:44.473 回答
1

用于.index('.findthis')仅在.findthis项目列表内限制计数。

演示在http://jsfiddle.net/3c5TZ/5/

还修复了丢失的</h2>错误

于 2012-02-21T14:11:32.727 回答
-1
$('.findthis').each( function(i){
  $(this).append(" ( this element = "+i+" )")
});

试试这个 ...

于 2012-02-21T14:23:08.403 回答