Виберіть елементи, які я раніше встановлював 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()
'getter' форма справді читає data-
атрибути HTML5 , але форма її setter ні створює, ні оновлює їх.
Ви можете використовувати це розширення jQuery Selector: Запит даних елемента
$(':data'); // All elements with data
$(':not(:data)'); // All elements without data
Ви можете використовувати інтерфейс користувача JQuery з селектором: 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]')