Функция jQuery "prop()" не работает?

Что я делаю неправильно? Пожалуйста, смотрите мою упрощенную скрипку здесь:

http://jsfiddle.net/a2q815fq/4/

function change() {
  $('#mainmenu3').prop('data-badge','444');
}

Должен изменить значок данных на "444", но не?!

Я думаю, что делаю что-то действительно глупое, но я не вижу этого!

РЕДАКТИРОВАТЬ: Спасибо за ответы. Я думаю, что-то в Fiddle не работает, потому что не работает простой "alert('test')"?! Должен ли быть другой вызов функции "change()"?

ИЗМЕНИТЬ СНОВА: thx, attr() работает, а prop() нет. НО, если я решу удалить его, removeAttr() должен работать для него? Но не - смотрите здесь: http://jsfiddle.net/a2q815fq/19/

ПОСЛЕДНИЕ РЕДАКТИРОВАТЬ: Как упомянул SultanBaby, селектор был неправильным. Должно быть: #mainmenu3 a[значок данных]! СПАСИБО, ребята, вы сделали мой день!

3 ответа

Решение

Я не видел скрипку, прежде чем ответить, мой ответ был неверным. Эй, твой селектор неправильный в первую очередь. Правильный селектор должен быть "#mainmenu3 a[data-badge]" и вы должны использовать attr как я правильно упомянул ранее:

$('#mainmenu3 a[data-badge]').attr('data-badge','444');

Я также упоминал ранее, что data-badge квалифицируется как действительный атрибут, но не как свойство.

Использование .data('badge', 444) или же .attr('data-badge', 444)

Вы хотите это:

function change() {
  $('#mainmenu3 a').attr('data-badge','444');
}

Поскольку атрибут является привязкой, а не элементом элемента списка. Обновленная скриптовая ссылка здесь.

PS: это также, кажется, работает, если я пропускаю a часть селектора, однако в этом случае ваша разметка будет иметь недостатки, просто она выглядит правильно.

Другие вопросы по тегам