Изменение идентификатора элемента с помощью jQuery - PullRequest
279 голосов
/ 07 декабря 2008

Мне нужно изменить идентификатор элемента с помощью 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.)

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

Ответы [ 8 ]

492 голосов
/ 07 декабря 2008

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

jQuery(this).prev("li").attr("id","newId");
55 голосов
/ 26 августа 2014

ПРЕДПОЧТИТЕЛЬНЫЙ ВАРИАНТ над .attr должен использовать .prop примерно так:

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

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

43 голосов
/ 07 декабря 2008

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

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

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

10 голосов
/ 25 января 2009

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

$('li').each(function(){
  if(this.id){
    this.id = this.id+"something";
  }
});
7 голосов
/ 07 декабря 2008

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

3 голосов
/ 26 мая 2016
$("#LeNomDeMaBaliseID").prop('id', 'LeNouveauNomDeMaBaliseID');
0 голосов
/ 23 сентября 2015
<script>
       $(document).ready(function () {
           $('select').attr("id", "newId"); //direct descendant of a
       });
</script>

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

0 голосов
/ 09 мая 2014

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...