Изменение идентификатора элемента с помощью jQuery

302

Мне нужно изменить идентификатор элемента с помощью jQuery.

Видимо, они не работают:

jQuery(this).prev("li").attr("id")="newid"
jQuery(this).prev("li")="newid"

Я обнаружил, что могу сделать это с помощью следующего кода:

jQuery(this).prev("li")show(function() {
    this.id="newid";
});

Но это не кажется мне правильным. Должен быть лучший способ, нет? Кроме того, если нет, какой другой метод я могу использовать вместо show / hide или других эффектов? Очевидно, я не хочу показывать / скрывать или воздействовать на элемент каждый раз, просто чтобы изменить его идентификатор.

(Да, я новичок в JQuery.)

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

yoavf
источник
5
В JavaScript вы можете присваивать переменной ( foo = 1), члену объекта ( foo.bar = 2или foo['bar'] = 2) или массиву индекс ( foo[0] = 3), но присваивать выражению, как результат оператора ( (x + b) = 5) или результат вызова функции ( foo() = 1, foo(x).bar(y) = 7) не имеет никакого смысла, так что это определенно не будет работать в jQuery или любой другой библиотеке JavaScript.
Ракслице

Ответы:

521

Ваш синтаксис неверен, вы должны передать значение в качестве второго параметра:

jQuery(this).prev("li").attr("id","newId");
Эран Гальперин
источник
4
Я думаю, что newId должен быть в кавычках
Джей Корбетт
5
Разве вам не нужно отсоединять элемент от DOM и заменять его новым элементом с новым идентификатором? Чтобы не сломать DOM ...?
cllpse
15
JQuery об этом позаботится, петуховая кислота.
McPherrinM
15
прибыл сюда двойная проверка переназначения идентификатора - теперь это должно быть .prop( ... )вместо .attr( ... )?
Карл
2
@Carl в соответствии с последними документами и примерами jquery, idвсе еще должен быть установлен с помощьюattr(...)
JoeBrockhaus
71

Предпочтительным вариантом .attrявляется использование .propследующим образом:

$(this).prev('li').prop('id', 'newId');

.attrизвлекает атрибут элемента, тогда как .propизвлекает свойство, на которое ссылается атрибут (то есть то, что вы на самом деле намереваетесь изменить)

Джереми Мориц
источник
4
.attr устарел - это правильный способ сделать это.
PointlessSpike
7
Откуда эта информация? api.jquery.com/attr ничего не говорит об устаревании ...
Сергей
Это не считается устаревшим. « Начиная с jQuery 1.6 , .prop()метод предоставляет способ явного извлечения значений свойств при .attr()извлечении атрибутов».
Иллюминатор
@Illuminator Я исправил свой ответ соответственно. Спасибо.
Джереми Мориц
45

Что вы хотите сделать, это:

jQuery(this).prev("li").attr("id", "newID");

Это установит идентификатор на новый идентификатор

Пим Ягер
источник
11

Я сделал нечто подобное с этой конструкцией

$('li').each(function(){
  if(this.id){
    this.id = this.id+"something";
  }
});
Петр Сафар
источник
7

Я не уверен, какова ваша цель, но может быть лучше вместо этого использовать addClass? Я имею в виду, что идентификатор объекта, по моему мнению, должен быть статическим и специфичным для этого объекта. Если вы просто пытаетесь изменить отображение на странице или что-то в этом роде, я бы поместил эти детали в класс, а затем добавил его в объект, а не пытался изменить его идентификатор. Опять же, я говорю это, не понимая вашей подчеркивающей цели.

Тим Найт
источник
3
радости унаследованных систем - тогда я понимаю вашу боль. Ответ Эрана определенно лучший тогда.
Тим Найт
5
На самом деле установка идентификатора полезна и полезна, если вы создаете DOM, используя скрытые шаблоны в HTML, а затем клонируете их с помощью jquery.
Стив Найт
5
$("#LeNomDeMaBaliseID").prop('id', 'LeNouveauNomDeMaBaliseID');
Себастьен
источник
1
Это решение уже было предоставлено здесь
Cristik
1
Пожалуйста, не публикуйте ответы только для кода - всегда добавляйте объяснение к своему коду в ответе.
Даниэль В.
2
<script>
       $(document).ready(function () {
           $('select').attr("id", "newId"); //direct descendant of a
       });
</script>

Это может сделать для всех целей. Просто добавьте перед закрывающим тегом свое тело и не добавляйте Jquery.min.js

Prassanna D Manikandan
источник
0

Ответ Эрана хорош, но я бы добавил к этому. Вам нужно следить за любой интерактивностью, которая не встроена в объект (то есть, если событие onclick вызывает функцию, она все равно будет), но если к этому идентификатору будет добавлена ​​обработка событий javascript или jQuery, она будет в основном заброшена. :

$("#myId").on("click", function() {});

Если идентификатор теперь изменился на # myID123, функция, прикрепленная выше, больше не будет работать правильно из моего опыта.

rfornal
источник