2012-06-08 3 views
6

У меня возникли проблемы с пониманием jqueries .each. У меня есть следующий код:jquery .each работает только на первом элементе

$('#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?

+1

Идентификатор должен быть уникальным на всей странице, поведение, которое вы наблюдаете, абсолютно нормально. –

+1

ваш HTML-код недействителен :) duplicate id

+0

исправить проблему несколькими элементами с одинаковым идентификатором, а затем попытаться использовать '$ .each' в классе, например. '$ ('. inner'). each (function ...' – jimmym715

ответ

16

Вы не можете использовать тот же #id для различных элементов. Попробуйте переименовать остальные, и вы получите результат, который вы хотите

Или это (работает без добавления каких-либо классов - чистый код)

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

У меня нет идентификатора для любого из моих выбранных элементов. В моем случае добавление domEle к моей функции сделало трюк. Спасибо – DerpyNerd

3

Это не проблема с методом each. Вы указали тот же самый номер id для нескольких элементов, который не поддерживается.

Используйте класс вместо этого, и вы можете найти все элементы.

Демо: http://jsfiddle.net/Guffa/xaL4n/

6

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')... 
+0

* facepalm * can not believe I забыл об этом xD Спасибо :) – Skye

+1

@Skye. Просто не используйте мой метод выбора атрибутов. это все еще недопустимый HTML. – gdoron

+0

Не беспокойтесь. TestDivs добавляются с jq, поэтому его быстрое решение – Skye

1

У вас есть неверный html. Идентификаторы должны быть уникальными. Вы должны изменить 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); 
}); 
1

Вы не можете указать тот же идентификатор Div в HTML-страницы.

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

insteed этого, попробуйте

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

и ваша функция должна выглядеть

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

});

Смежные вопросы