Динамический пользовательский атрибут не отображается

0

У меня есть следующий код, который является частью динамического цикла и создает новую сетку с 1 столбцом и 4 строками. В четвертом ряду есть кнопка:

var elem = $(this,'a[data-itemid]');
$(elem).prop('data-itemid', '"'+value+'"');
console.log($(elem).prop('data-itemid'));
console.log(elem);

Используя консоль разработчика, вот как это делается:

<a data-role="button" name="orderButton" dsid="orderButton" class="menuMaster_orderButton    ui-link ui-btn ui-btn-b ui-icon-none ui-btn-icon-nowhere ui-shadow ui-corner-all" id="menuMaster_orderButton" data-corners="true" data-icon="none" data-iconpos="nowhere" data-mini="false" data-theme="b" tabindex="7" role="button">Order!</a>

Поскольку он циклически проходит через каждую запись, у меня есть приведенный выше код, который должен добавить новый атрибут, называемый "data-itemid", и значение. На этой строке:

console.log($(elem).prop('data-itemid'));

Это дает мне правильное значение. Поэтому я знаю, что он добавляет новый атрибут. Но я не думаю, что это его добавление, потому что я не могу найти его вообще.

console.log(elem);

Это дает мне:

[Window, jquery: "1.9.1", constructor: function, init: function, selector: "", size: function…]

Что не является элементом :(

ОБНОВЛЕНИЕ:

Это то, что я использую во время цикла при создании кнопок:

$(this,'a[name=orderButton]').data('itemid', value);

Это то, что используется для получения onClick:

console.log('itemid= '+$(this, 'a[name=orderButton]').data('itemid'));

Вышеизложенное возвращается неопределенно.

  • 0
    console.log(elem); печатает указанное значение, потому что это объект jQuery ... вы можете попробовать console.log(elem[0]);
Теги:
dom
element

1 ответ

1
Лучший ответ

jQuery сохраняет все атрибуты data в объекте в памяти для повышения производительности. Любые атрибуты, добавленные в элемент после загрузки DOM, хранятся только в этом объекте и не будут отображаться в источнике HTML.

Вы можете проверить, был ли атрибут data установлен с помощью data() для его получения. Не используйте prop('data-x') или attr('data-x'); поскольку по вышеуказанной причине атрибуты не гарантированы, и это намного медленнее.

Имея это в виду, ваш первый пример должен быть:

var elem = $(this,'a[data-itemid]');
$(elem).data('itemid', value);
console.log($(elem).data('itemid'));
console.log(elem);
  • 0
    Я получаю ту же проблему, в том смысле, что она отображается в консоли, но не в элементе для ее извлечения.
  • 0
    Это не проблема - вот как это работает. Для установки используйте $el.data('foo', 'bar'); использовать x = $el.data('foo');
Показать ещё 6 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню