2

HTML:

<div class="div1">Div 1</div>
<div class="div2">Div 2</div> 
<div class="div3">Div 3</div> 
<div class="div4">Div 4</div> 

<div class="test">Test</div>
<br />
<div class="test">Test</div>
<br />
<div class="test">Test</div> 
<br />
<div class="test">Test</div>
<br />

查询:

$(".test").each(function(){
    var i = $(this).index();
    alert(i);
});

Fiddle Demo

我希望结果是0, 1, 2, 3,但为什么输出是4, 6, 8, 10

4

5 回答 5

3

轻松修复 - .each 支持索引:

$(".test").each(function(idx){
    alert(idx);
});
于 2013-04-06T16:28:45.107 回答
3

为什么输出是4, 6, 8, 10

$(this).index()返回元素相对于其兄弟元素的索引,而不是选定元素的索引。和元素也是兄弟姐妹br.divX

看起来你想要:

var $tests = $(".test");

$tests.each(function(){
    var i = $tests.index(this);
    alert(i);
});

或更简单:

$(".test").each(function(i){
    alert(i);
});
于 2013-04-06T16:28:55.900 回答
3

index() 给出元素相对于其兄弟元素的索引。具有文本类的第一个 div 是第 5 个元素,索引为 4,br 位于 5 索引处,下一个具有类 test 的 div 具有索引 6,依此类推。我们可以通过下面的demo查看每个元素的索引

现场演示

$("#parent1 *").each(function () {
    alert("TagName >> " + this.tagName + ", Index >> " + $(this).index() + ", Text " + $(this).text());
});

如果没有参数传递给 .index() 方法,则返回值是一个整数,指示 jQuery 对象中的第一个元素相对于其兄弟元素Reference的位置。

于 2013-04-06T16:29:05.913 回答
3

你想要做的是:

$(".test").each(function(i) {
    alert(i);
});

.index()返回相对于其兄弟的索引。

于 2013-04-06T16:29:38.210 回答
2

您必须使其与您要测试的内容相关。采用:

$(".test").each(function(){
    var i = $('.test').index($(this));
    console.log(i);
});

jsFiddle 示例

根据以下文档.index()

如果在元素集合上调用 .index() 并传入 DOM 元素或 jQuery 对象,则 .index() 返回一个整数,指示传递的元素相对于原​​始集合的位置。

于 2013-04-06T16:29:11.220 回答