102

我正在尝试选择所有data-go-to属性不为空的元素。

我已经尝试过$('[data-go-to!=""]')了,但奇怪的是,如果我这样做,它似乎会选择页面上的每一个元素。

4

11 回答 11

203

作为进一步参考,以及最新的 (may'14) (aug'15) (sep'16) (apr'17) (mar'18) (mar'19) (may'20) ( jan' 22 ) ...
适用于的答案:

###Empty 字符串:如果必须存在 &可以有任何值(或根本没有)attr

    jQuery("[href]");

###Missing 属性:如果可以存在&如果存在,必须有一些价值attr

    jQuery("[href!='']");

###或两者兼有:如果必须存在且必须具有某些价值...attr

    jQuery("[href!=''][href]");

PS:更多组合是可能的......


###在jsFiddle中检查此测试以获取示例:


###Or here in SO with this Code 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>

于 2014-05-29T22:28:40.490 回答
79

尝试

$(':not([data-go-to=""])')

更新:

为了不让任何人误入歧途,这个答案将适用于旧版本的 jQuery,但不是面向未来的。由于@gmo 和@siva 的答案似乎都适用于以后的版本,所以我尊重(并鼓励你投票)他们的答案......当然希望你有一个美好的一天。

于 2012-05-17T18:20:54.373 回答
19
$('[data-go-to!=""]:[data-go-to]').each(function() {
    // Do Your Stuff
});​
于 2012-05-17T18:28:59.950 回答
9

有 'data-attributename' 并且它的值不为空:

$('[data-attributename]:not([data-attributename=""])')

'data-attributename' 是否为空:

$('[data-attributename]')

JS 小提琴示例

于 2014-07-30T18:02:02.927 回答
5

我不确定一个简单的选择器,但你可以使用filter()

$('[data-go-to]').filter(
    function(){
        return ($(this).attr('data-go-to').length > 0);
    });

JS 小提琴演示

参考:

于 2012-05-17T18:18:37.340 回答
4

根据文档 ,这应该这样做

:not([attr="value"])

演示

希望这可以帮助

于 2012-05-17T18:19:56.483 回答
3
$('[data-go-to]:not([data-go-to=""])')

JSBIN

于 2014-07-17T22:40:36.557 回答
2
$('[data-go-to]').filter(function() {
    return $(this).data('go-to')!="";
});

使用:not,.not():empty只会检查元素本身是否为空,而不是数据属性。为此,您必须根据数据属性值进行过滤。

小提琴

于 2012-05-17T18:24:21.567 回答
1

这对我有用

$('[attributename]').filter('[attributename!=""]')
于 2014-10-08T06:56:51.213 回答
0

试试这个 :

$('[data-go-to:not(:empty)]')
于 2012-05-17T18:19:10.520 回答
0

这对我有用:

$('.data .title td[data-field!=""]')
于 2015-01-14T13:15:24.190 回答