Зміна ідентифікатора елемента за допомогою jQuery


302

Мені потрібно змінити ідентифікатор елемента за допомогою jQuery.

Мабуть, це не працює:

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

Я дізнався, що я можу це зробити за допомогою наступного коду:

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

Але це мені не здається правильним. Повинен бути кращий шлях, ні? Крім того, у разі відсутності, який інший метод я можу використовувати замість показу / приховування чи інших ефектів? Очевидно, я не хочу кожного разу показувати / ховати або впливати на елемент, просто щоб змінити його ідентифікатор.

(Так, я новачок jQuery.)

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


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.
rakslice

Відповіді:


520

Ваш синтаксис невірний, вам слід передати значення як другий параметр:

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 застаріло - це правильний спосіб зробити це.
Безглуздий

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
Це рішення вже було надано тут
Крістік

1
Будь ласка, не публікуйте відповіді лише для коду - у відповідь завжди додайте пояснення до свого коду.
Даніель В.

2
<script>
       $(document).ready(function () {
           $('select').attr("id", "newId"); //direct descendant of a
       });
</script>

Це можна зробити для всіх цілей. Просто додайте перед тим, як закривати тег тіла, і не отримуйте, щоб додати Jquery.min.js


0

Відповідь Ерана хороша, але я б до цього додавався. Вам потрібно спостерігати за будь-якою інтерактивністю, яка не є вбудованою в об'єкт (тобто, якщо подія onclick викликає функцію, вона все-таки буде), але якщо до цього ідентифікатора додається якесь обробка подій javascript або jQuery, воно в основному буде відмовлено :

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

Якщо ідентифікатор тепер буде змінено на # myID123, функція, приєднана вище, з мого досвіду більше не працюватиме належним чином.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.