jquery .each仅适用于第一个元素

时间:2012-06-08 12:49:03

标签: jquery html loops indexing each

我无法理解jqueries。每个。 我有以下代码:

$('#testDiv').each(function(index, domEle){    
    $(this).text(index);
});

以及以下HTML

<div id="p18">
    <div class="inner">
        <span>...</span>
        <p class="right">...</p>
        <div id="testDiv"></div>
    </div>
</div>
<div id="p19">
    <div class="inner">
        <span>...</span>
        <p class="right">...</p>
        <div id="testDiv"></div>
    </div>
</div>
<div id="p20">
    <div class="inner">
        <span>...</span>
        <p class="right">...</p>
        <div id="testDiv"></div>
    </div>
</div>

当脚本运行时,它只适用于第一个testDiv,因为它正确地将文本设置为0,而不是其他testDivs。

我的总体目标是编写一个脚本,根据另一个div的高度设置div的高度。高度不同所以我认为循环结构是要走的路(除非我弄错了?)

我对jq代码做错了什么?

5 个答案:

答案 0 :(得分:17)

您不能对不同的元素使用相同的#id。尝试重命名其余的,你会得到你想要的结果

或者这样做(无需添加任何类别 - 清洁代码)

$('.inner div').each(function(index, domEle){    
    $(this).text(index);
});

答案 1 :(得分:6)

id选择器返回最多一个元素。

您永远不应该有多个具有相同ID的元素。这是一个无效的HTML

这样可行,但您应该修改HTML:

$('div[id="testDiv"]')...

你应该做的是:

<div id="p18">
    <div class="inner">
        <span>...</span>
        <p class="right">...</p>
        <div class="testDiv"></div>
    </div>
</div>
<div id="p19">
    <div class="inner">
        <span>...</span>
        <p class="right">...</p>
        <div class="testDiv"></div>
    </div>
</div>

然后按类别选择:

$('.testDiv')...

答案 2 :(得分:3)

这不是each方法的问题。您已为多个元素指定了相同的id,这是不受支持的。

改为使用类,您可以找到所有元素。

演示:http://jsfiddle.net/Guffa/xaL4n/

答案 3 :(得分:1)

你的html无效。 Ids需要独一无二。您应该将id="testDiv"更改为class="testDiv"

<强> HTML

<div id="p20">
    <div class="inner">
        <span>...</span>
        <p class="right">...</p>
        <div class="testDiv"></div>
    </div>
</div>

<强>的Javascript

$('.testDiv').each(function(index, domEle){    
    $(this).text(index);
});

答案 4 :(得分:1)

您不能在html页面中指定相同的div id。

<div id="testDiv"></div>

保证,尝试

<div class="testDiv"></div>

,你的功能应该是

$('.testDiv').each(function(index, domEle){    
$(this).text(index);

});