2016-02-29 1 views
2

Просто я пытаюсь использовать jQuery для добавления числового значения (в настоящее время хранящегося в массиве) до конца атрибута id для ряда указанных элементов.Добавить значение массива в атрибут идентификатора выделенных элементов

$('#headerAfirstLink, #headerAsecondLink, #headerAthirdLink, #headerAfourthLink').attr("id", // Append modCount[0].toString() to each existing ID); 

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

В примере, предпочтительные полученные идентификаторы должны быть:

#headerAfirstLink1, #headerAsecondLink1, #headerAthirdLink1, #headerAfourthLink1 

(Если modCount [0] == 1).

Я уверен, что это раскаино прост, но будет ценным руководство. Thanks

+0

Можете ли вы добавить HTML тоже. – Tushar

ответ

3

Вы можете использовать .attr(attributeName, function) синтаксис для обновления значения атрибута для каждого соответствующего элемента.

$('#headerAfirstLink, #headerAsecondLink, #headerAthirdLink, #headerAfourthLink') 
    .attr("id", function(index, oldId) { 
     // oldId is the attribute value 
     return oldId + modCount[0]; 
    }); 

Только в случае, чтобы обновить атрибут всех элементов, идентификатор начинается с header, вы можете использовать attribute starts with selector.

$('[id^="header"]').attr('id', function(index, oldId) { 
    return oldId + modCount[0]; 
}); 
+0

Блестящий, работает как и ожидалось. Однако я не совсем понимаю, как oldId заполняется текущим идентификатором. JQuery автоматически передает существующее имя атрибута в функцию обратного вызова? – Jordan

+1

@JordanDolan Этот код такой же, как 'each'. Итерация по каждому из согласованного элемента и передача идентификатора в качестве второго параметра в функцию обратного вызова attr. – Tushar

+0

Отлично; хорошо знать - спасибо. – Jordan

3

Попробуйте использовать подпись .attr("attrName" , callBack), чтобы получить то, что вы хотите.

$('#headerAfirstLink, #headerAsecondLink, #headerAthirdLink, #headerAfourthLink') 
    .attr("id", function(_,id){ 
    return id + modCount[0]; 
    }); 

Не путайте первый параметр, переданный с помощью callBack. Это индекс. Я просто использовал там подчеркивание, поскольку в нашем случае это не требуется. Просто скрыть его визуальную.

Или лучший/поддерживаемый подход будет устанавливать общий класс (например: тест) на эти четыре элемента и использовать class selector вместо multiple selector.

$('.test').attr('id', function(_, id) { 
    return id + modCount[0]; 
}); 

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

  • Нет связанных вопросов^_^