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!=""]')