jQuery каждый цикл, чтобы переименовать каждый экземпляр идентификатора - PullRequest
2 голосов
/ 07 августа 2011

У меня есть страница, которая создает динамически созданные строки в таблице с входом с идентификатором «fixedRate»

Я пытаюсь переименовать каждый экземпляр идентификатора fixedRate. Это работает только для первого экземпляра идентификатора с моим текущим кодом.

Вот код:

var amountRows = $("#billTasks > tr").size();
var i=1;


$("#fixedRate").each(function(){

if (i == amountRows) {
    return false; 
}
    this.id = this.id + i;
    i++;
});

Я думаю, что код должен работать, добавляя 1,2,3, ... в конце слова fixedRate для каждого экземпляра идентификатора fixedRate. (то есть fixedRate1, fixedRate2, ...)

Нужно ли использовать цикл while? Я пробовал много разных вещей, включая цикл while, и мне удавалось сбивать мой браузер снова и снова. Так что теперь я ищу твою помощь!

спасибо !!!

Ответы [ 5 ]

2 голосов
/ 07 августа 2011

При использовании селектора идентификаторов jQuery возвращает только первый экземпляр.

Each id value must be used only once within a document. If more than one element has been assigned the same ID, queries that use that ID will only select the first matched element in the DOM.

http://api.jquery.com/id-selector/

Поскольку возвращается только один элемент, каждый ваш циклзапускается только один раз.

У вас есть два возможных решения.Вы можете либо обновить логику в вашем скрипте, которая автоматически генерирует идентификатор fixedRate, чтобы он генерировал уникальные идентификаторы, либо вы можете настроить этот сценарий на установку класса fixedRate вместо идентификатора.Затем вы можете просмотреть каждый класс и присвоить ему уникальный идентификатор.

$(".fixedRate").each(function(i) {
    var row = $(this)
    row.attr('id', 'fixedRate' + i);
});
0 голосов
/ 07 августа 2011

Попробуйте:

$(".fixedRate").each(function(i){
    var $this = $(this)
    $this.attr('id','fixedRate' + i);
});

Вам не нужно следить за количеством строк.

И используйте класс для вызова всех тарифов, а затем назначьте идентификатор.

0 голосов
/ 07 августа 2011

Возможно, вы можете попробовать использовать что-то похожее на:

$('tbody tr[id^="fixedRate"]').each(
    function(i){
        this.id = 'fixedRate' + i;
    });

JS Fiddle demo .

0 голосов
/ 07 августа 2011

Это не сработает, вы должны сначала иметь уникальные идентификаторы.
Или вместо id="fixedRate" сделайте его class="fixedRate" и используйте вместо него $(".fixedRate").
Опубликовал пример jsfiddle http://jsfiddle.net/playerace/L4szw/ и обратите внимание, что оповещение приходит только один раз.

0 голосов
/ 07 августа 2011

Идентификаторы в основном предназначены для выделения элементов, если вы хотите широкую группу. Я предлагаю вам преобразовать идентификатор в класс, такой как

<a class="test"></a>

Затем вы можете получить доступ ко всем элементам с помощью селектора

$(".test") // gathers all elements that contain that class

также, если вы хотите перечислить все элементы, вы можете использовать каждую функцию с двумя параметрами в обратном вызове

$.each($(".test"), function(a,b){
//a is the index
//b is the element
b.attr("id", a); // to set each element id to their index
});
...