Не удается найти элемент с определенным атрибутом тире данных, который я добавил динамически

Когда я добавляю атрибут data-itemid к элементу, я не могу найти этот элемент, используя

$('someSelector').find( '[data-itemid="' + itemid + '"]' )

Делает

$('#id-of-element-i-added-the-attribute-to').data('itemid')

возвращает правильные данные.

$('#id-of-element-i-added-the-attribute-to').attr('data-itemid')

возвращает пустую строку.

$('someSelector').find( '[data-itemid="' + itemid + '"]' ) работает для элементов, которые изначально имеют этот атрибут тире данных, но не для динамически добавленных атрибутов.

Я добавляю такой атрибут $('#'+listItemId).data('itemid', itemId);

Как я могу найти элемент, который имеет этот динамически добавленный атрибут data-itemid с определенным значением.

Эти селекторы тоже не работают (возвращают пустые массивы):

$('*').find( '[data-itemid="' + itemid + '"]' )
$('[data-itemid="' + itemid + '"]' )
$('[data-itemid="16"]' )

person user619656    schedule 14.01.2013    source источник
comment
$('#'+listItemId).data('itemid', itemId) не добавляет атрибут. jQuery просто хранит эти данные внутри. Используйте .attr для установки значений атрибутов или используйте ответ Рори.   -  person James Allardice    schedule 14.01.2013
comment
$('someSelector').find( '[data-itemid=" + itemid + "]' ) точно опечатка? (Поскольку он ищет data-itemid, который буквально представляет собой переменную ` + itemid + , rather than using the value of hte itemid`.) Я не понимаю, почему люди не могут использовать копирование и вставку... ;-)   -  person T.J. Crowder    schedule 14.01.2013
comment
Редактирую вопрос, меняю $('someSelector').find( '[data-itemid=" + itemid + "]' ) на $('someSelector').find( '[data-itemid="' + itemid + '"]' ), но не прохожу проверку. :П   -  person pktangyue    schedule 14.01.2013
comment
@pktangyue: Это то, что лучше оставить на усмотрение OP - на случай, если это действительно то, что есть в их коде!   -  person T.J. Crowder    schedule 14.01.2013
comment
@ T.J.Crowder Да, спасибо!   -  person pktangyue    schedule 14.01.2013
comment
@James не знал, что jQuery хранит атрибуты данных внутри, очень полезная информация, спасибо.   -  person user619656    schedule 14.01.2013
comment
@ T.J.Crowder, да, это опечатка, сейчас же отредактирую.   -  person user619656    schedule 14.01.2013


Ответы (1)


Вы можете использовать filter для поиска динамически добавляемых data атрибутов. Попробуй это:

var $elementsWithDataAttr = $('someSelector .class').filter(function() {
    return $(this).data('itemid') != "";
});
// do something with $elementsWithDataAttr ...
person Rory McCrossan    schedule 14.01.2013