Зміна ідентифікатора елемента за допомогою 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.