Выберите элементы, которые я ранее установил с помощью jquery.data();
т.е. выбрать все элементы с .data('myAttr')
уже установленными.
РЕШЕНИЕ
Jsfiddle для демонстрации - Fiddle
Выберите элементы, которые я ранее установил с помощью jquery.data();
т.е. выбрать все элементы с .data('myAttr')
уже установленными.
РЕШЕНИЕ
Jsfiddle для демонстрации - Fiddle
Ответы:
Ты мог бы сделать
$('[data-myAttr!=""]');
это выбирает все элементы, у которых есть атрибут, data-myAttr
не равный '' (так что он должен быть установлен);
вы также можете использовать filter ()
$('*').filter(function() {
return $(this).data('myAttr') !== undefined;
});
Самый лучший и простой способ выбрать их:
$('[data-myAttr]')
Больше информации:
Много чего тестировал.
Использование $('[data-myAttr!=""]')
работает не во всех случаях. Поскольку элементы, у которых нет data-myAttr
набора, будут иметь их data-myAttr
равные undefined
и $('[data-myAttr!=""]')
будут выбирать их, что неверно.
Вы можете использовать filter () :
var elements = $("*").filter(function() {
return $(this).data("myAttr") !== undefined;
});
$('[data-myAttr]')
?
data()
форма получателя действительно читает data-
атрибуты HTML5 , но форма установщика не создает и не обновляет их.
Вы можете использовать это расширение jQuery Selector: запрос данных элемента
$(':data'); // All elements with data
$(':not(:data)'); // All elements without data
Вы можете использовать JQuery UI с селектором: data ()
Выбирает элементы, данные которых хранятся под указанным ключом.
Посмотрите этот jsfiddle для примера
Чтобы все элементы совпадали, .data('myAttr')
вы можете использовать
var matches = $(':data(myAttr)');
Это должно работать как для элементов с data-
атрибутами, так и для элементов с данными, хранящимися с использованием, $.data()
потому что
Начиная с jQuery 1.4.3 атрибуты данных HTML 5 будут автоматически вставлены в объект данных jQuery.
Но это не очень хорошо работает. Отметьте этот jsfiddle и вы увидите, что при втором вызове селектора он должен соответствовать 2 элементам и соответствует только одному. Это связано с "ошибкой" в библиотеке jquery-ui.
Это взято из основного файла jquery-ui.
$.extend( $.expr[ ":" ], {
data: $.expr.createPseudo ?
$.expr.createPseudo(function( dataName ) {
return function( elem ) {
return !!$.data( elem, dataName );
};
}) :
// support: jQuery <1.8
function( elem, i, match ) {
return !!$.data( elem, match[ 3 ] );
}
});
Как вы можете видеть, они используют $.data(elem, match)
вместо этого, $(elem).data(match)
что приводит к тому, что кеш не обновляется, если вы запрашиваете элементы с data-
атрибутами. Если элемент был протестирован наdata()
хранения, это работает хорошо, но в противном случае он не будет включен в результирующие совпадения.
Это может быть вовсе не ошибкой, если вы хотите сопоставить только элементы с информацией о данных, установленной вами, но если нет, у вас остается два варианта.
Не используйте jquery-ui и не расширяйте собственный псевдоселектор $(:mydata(myAttr))
$.extend($.expr[":"], {
mydata: $.expr.createPseudo ?
$.expr.createPseudo(function(dataName) {
return function(elem) {
return !!$(elem).data(dataName);
};
}) : function(elem, i, match) {
return !!$(elem).data(match[3]);
}
});
Используйте jquery-ui с :data
псевдоселектором и объедините результаты выбора, [data-myAttr]
чтобы включить те, которые могут быть пропущены
var matches = $(':data(myAttr)', '[data-myAttr]')
Выберите элементы, которые я ранее установил с помощьюjquery.data();
Вопрос в том, чтобы найти все элементы с определенным ключом, а не какие-либо данные.
Попробуйте использовать jQuery.data()
$(".myClass").each(function(i){
if( i % 2 == 0 ){
$(this).data("myAttr",i + 1);
}
});
var res = $(".myClass").map(function(i) {
console.log($(this).data("myAttr"));
return $.data(this, "myAttr") !== undefined ? this : null
});
console.log(res);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js">
</script>
<div class="myClass">1</div>
<div class="myClass">2</div>
<div class="myClass">3</div>
<div class="myClass">4</div>
<div class="myClass">5</div>
jsfiddle http://jsfiddle.net/xynZA/142/
html
data-*
атрибутом, а также с jQuery.data()
установленным?
$('[data-myAttr]')