JQuery: выберите атрибуты данных, которые не являются пустыми?
Я пытаюсь выбрать все элементы с атрибутом data-go-to
, который не является пустым.
Я пробовал $('[data-go-to!=""]')
, но, как ни странно, кажется, что он выбирает каждый элемент на странице, если я это делаю.
Ответы
Ответ 1
попробовать
$(':not([data-go-to=""])')
UPDATE:
Ради того, чтобы никого не сбивать с толку, этот ответ будет работать в более ранних версиях jQuery, но не является будущим. Поскольку ответы @gmo и @siva обе кажутся работающими с более поздними версиями, я откладываю (и поощряю вас отстаивать) свои ответы... и, конечно, надеюсь, что у вас есть фантастический день.
Ответ 2
Как дополнительная ссылка и обновленный (may'14) (aug'15) (sep'16) (apr'17) который работает с:
Пустые строки:
Если существует attr
must и может иметь любое значение (или вообще ничего)
jQuery("[href]");
Отсутствующие атрибуты:
Если attr
может существовать, а если существует, должен иметь некоторое значение
jQuery("[href!='']");
Или оба:
Если attr
должен существовать, а должен иметь некоторое значение...
jQuery("[href!=''][href]");
PS: возможны больше комбинаций...
Проверьте этот тест в jsFiddle для примеров:
* Snippet запускает jQuery v2.1.1
jQuery('div.test_1 > a[href]').addClass('match');
jQuery('div.test_2 > a[href!=""]').addClass('match');
jQuery('div.test_3 > a[href!=""][href]').addClass('match');
div,a {
display: block;
color: #333;
margin: 5px;
padding: 5px;
border: 1px solid #333;
}
h4 {
margin: 0;
}
a {
width: 200px;
background: #ccc;
border-radius: 2px;
text-decoration: none;
}
a.match {
background-color: #16BB2A;
position: relative;
}
a.match:after {
content: 'Match!';
position: absolute;
left: 105%;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="test_1">
<h4>Test 1: jQuery('a[href]')</h4>
<a href="test">href: test</a>
<a href="#">href: #</a>
<a href="">href: empty</a>
<a>href: not present</a>
</div>
<div class="test_2">
<h4>Test 2: jQuery('a[href!=""]')</h4>
<a href="test">href: test</a>
<a href="#">href: #</a>
<a href="">href: empty</a>
<a>href: not present</a>
</div>
<div class="test_3">
<h4>Test 3: jQuery('a[href!=""][href]')</h4>
<a href="test">href: test</a>
<a href="#">href: #</a>
<a href="">href: empty</a>
<a>href: not present</a>
</div>
Ответ 3
$('[data-go-to!=""]:[data-go-to]').each(function() {
// Do Your Stuff
});
Ответ 4
Я не уверен в простом селекторе, но вы можете использовать filter()
:
$('[data-go-to]').filter(
function(){
return ($(this).attr('data-go-to').length > 0);
});
JS Fiddle demo.
Литература:
Ответ 5
В соответствии с документацией
это должно сделать это
:not([attr="value"])
DEMO
Надеюсь, что это поможет
Ответ 6
Имеет 'data-attributename' и его значение не пусто:
$('[data-attributename]:not([data-attributename=""])')
По умолчанию 'data-attributename' пуст или нет:
$('[data-attributename]')
Пример скрипта JS
Ответ 7
$('[data-go-to]').filter(function() {
return $(this).data('go-to')!="";
});
Используя :not
, .not()
, :empty
и т.д., будет проверяться только, является ли сам элемент пустым, а не атрибутом данных. Для этого вам придется фильтровать на основе значений атрибутов данных.
FIDDLE
Ответ 8
$('[data-go-to]:not([data-go-to=""])')
JSBIN
Ответ 9
Это работает для меня
$('[attributename]').filter('[attributename!=""]')
Ответ 10
Попробуйте следующее:
$('[data-go-to:not(:empty)]')
Ответ 11
Это работает для меня:
$('.data .title td[data-field!=""]')