jQuery: выберите атрибуты данных, которые не являются пустыми?
Я пытаюсь выбрать все элементы, которые имеют data-go-to
атрибут, который не является пустым.
Я пробовал $('[data-go-to!=""]')
но, как ни странно, кажется, что он выбирает каждый элемент на странице, если я это сделаю.
11 ответов:
попробовать
$(':not([data-go-to=""])')
обновление:
ради того, чтобы не вводить никого в заблуждение, этот ответ будет работать в более старых версиях jQuery, но не является защищенным от будущего. Поскольку ответы @gmo и @siva, похоже, работают с более поздними версиями, я откладываю (и призываю вас повысить) их ответы....и конечно надеюсь, что у вас есть фантастический день.
как раз как более дальнеишая ссылка, и вверх-к-дата
(Май'14)(aug'15)(sep'16)(apr'17)(18 марта)...
Ответ, который работает с:пустые строки:
если
attr
должны& может имеют любое значение (или вообще нет)jQuery("[href]");
отсутствует атрибуты:
если
attr
может существует и если существует,должны иметь некоторое значениеjQuery("[href!='']");
или так:
если
attr
должны& есть чтобы иметь какое-то значение...jQuery("[href!=''][href]");
PS: возможны и другие комбинации...
проверьте этот тест в jsFiddle для примера:
jQuery v1.11.0 ->
jsFiddle онлайн-тестjQuery v2.1.0 ->
jsFiddle online тестjQuery v2.1.3 ->
jsFiddle онлайн-тестjQuery v3.0.0-alpha1 ->
jsFiddle онлайн-тестjQuery v3.1.1 Slim ->
jsFiddle онлайн-тестjQuery v3.2.1 ->
jsFiddle онлайн-тестjQuery v3.3.1 ->
jsFiddle онлайн-тестпоследняя версия jQuery доступна в jsFiddle в мае 29 ' 18jQuery Edge ->
jsFiddle онлайн-тестjQuery edge версия (использовать с осторожностью)
Или вот в так с этим Код.
* сниппет работает под управлением 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>
Я не уверен в простом селекторе, но вы могли бы использовать
filter()
:$('[data-go-to]').filter( function(){ return ($(this).attr('data-go-to').length > 0); });
ссылки:
по словам документация это должно сделать его
:not([attr="value"])
надеюсь, что это помогает
имеет 'data-attributename' и его значение не пустое:
$('[data-attributename]:not([data-attributename=""])')
имеет' data-attributename ' пустой или нет:
$('[data-attributename]')
$('[data-go-to]').filter(function() { return $(this).data('go-to')!=""; });
используя
:not
,.not()
,:empty
etc будет проверять только если сам элемент пуст, а не атрибут данных. Для этого вам придется фильтровать на основе значения атрибутов данных.