У меня есть следующий код, который является частью динамического цикла и создает новую сетку с 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'));
Вышеизложенное возвращается неопределенно.
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);
$el.data('foo', 'bar');
использовать x = $el.data('foo');
console.log(elem);
печатает указанное значение, потому что это объект jQuery ... вы можете попробоватьconsole.log(elem[0]);