jQuery的:select不是空的数据属性?
我试图select具有不为空的data-go-to
属性的所有元素。
我已经尝试过$('[data-go-to!=""]')
但奇怪的是,如果我这样做,似乎是select页面上的每一个元素。
尝试
$(':not([data-go-to=""])')
更新:
为了不引导任何人误入歧途,这个答案将在旧版本的jQuery中工作,但不是未来的certificate。 由于@gmo和@ siva的答案似乎都适用于后续版本,所以我遵循(并鼓励你高举他们的答案)……当然,希望你有美好的一天。
正如更进一步的参考和最新的 (5月14 日 ) (Aug'15) (sep'16) ( apr'17 )答案那样:
空string:
如果
attr
必须存在并且可以有任何价值(或根本没有价值)
jQuery("[href]");
缺less属性:
如果
attr
可以存在,如果存在, 必须有一定的价值
jQuery("[href!='']");
或两者:
如果
attr
必须存在, 必须具有一定的价值…
jQuery("[href!=''][href]");
PS :更多的组合是可能的…
在jsFiddle中检查这个testing的例子:
-
jQuery v1.11.0 ->
jsFiddle在线testing -
jQuery v2.1.0 ->
jsFiddle在线testing -
jQuery v2.1.3 ->
jsFiddle在线testing -
jQuery v3.0.0-alpha1 ->
jsFiddle在线testing -
jQuery v3.1.1 Slim ->
jsFiddle在线testing -
jQuery v3.2.1 ->
jsFiddle在线testing 最后的jQuery版本在jsFiddle at apr 03'17 -
jQuery Edge ->
jsFiddle在线testing jQuery边缘版本 (谨慎使用)
或者在这个SO 代码片段中 。
*代码片段正在运行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>
$('[data-go-to!=""]:[data-go-to]').each(function() { // Do Your Stuff });
我不确定一个简单的select器,但你可以使用filter()
:
$('[data-go-to]').filter( function(){ return ($(this).attr('data-go-to').length > 0); });
JS小提琴演示 。
参考文献:
-
filter()
。
根据文件,这应该做到这一点
:not([attr="value"])
DEMO
希望这可以帮助
具有“数据属性名称”,其值不为空:
$('[data-attributename]:not([data-attributename=""])')
'data-attributename'是否为空:
$('[data-attributename]')
JS小提琴的例子
$('[data-go-to]').filter(function() { return $(this).data('go-to')!=""; });
使用:not
, .not()
:empty
只会检查元素本身是空的,而不是数据属性。 为此,您将不得不根据数据属性值进行过滤。
小提琴
$('[data-go-to]:not([data-go-to=""])')
JSBIN
这对我有用
$('[attributename]').filter('[attributename!=""]')
尝试这个 :
$('[data-go-to:not(:empty)]')
这适用于我:
$('.data .title td[data-field!=""]')