jQuery: Select data attributes that aren't empty?

JavascriptJqueryJquery SelectorsCustom Data-Attribute

Javascript Problem Overview


I'm trying to select all elements that have a data-go-to attribute that is not empty.

I've tried $('[data-go-to!=""]') but oddly enough it seems to be selecting every single element on the page if I do that.

Javascript Solutions


Solution 1 - Javascript

Just as further reference, and an up-to-date (may'14) (aug'15) (sep'16) (apr'17) (mar'18) (mar'19) (may'20) (jan'22)...
Answer that works with:

> ###Empty strings: > If the attr must exist & could have any value (or none at all)

    jQuery("[href]");

> ###Missing attributes: > If attr could exist & if exist, must have some value

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

> ###Or both: > If attr must exist & has to have some value...

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

PS: more combinations are possible...


###Check this test in jsFiddle for examples:


###Or here in SO with this Code Snippet.
* Snippet is running 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>

Solution 2 - Javascript

try

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

UPDATE:

For the sake of not leading anyone astray, this answer will work in older versions of jQuery but is not future-proof. Since @gmo and @siva's answers both seem to be working with later versions I defer to (and encourage you to upvote) their answers....and of course hope you have a fantastic day.

Solution 3 - Javascript

$('[data-go-to!=""]:[data-go-to]').each(function() {
    // Do Your Stuff
});​

Solution 4 - Javascript

Has 'data-attributename' and its value is not empty:

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

Has 'data-attributename' empty or not:

$('[data-attributename]')

[JS Fiddle example][1]

[1]: http://jsfiddle.net/Jelgab/yjJu7/3/ "JS Fiddle Example"

Solution 5 - Javascript

I'm not sure about a simple selector, but you could use filter():

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

JS Fiddle demo.

References:

Solution 6 - Javascript

According to the documentation this should do it

:not([attr="value"])

DEMO

Hope this helps

Solution 7 - Javascript

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

JSBIN

Solution 8 - Javascript

$('[data-go-to]').filter(function() {
    return $(this).data('go-to')!="";
});

Using :not, .not(), :empty etc will only check if the element itself is empty, not the data attribute. For that you will have to filter based on the data attributes value.

FIDDLE

Solution 9 - Javascript

This works for me

$('[attributename]').filter('[attributename!=""]')

Solution 10 - Javascript

Try this :

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

Solution 11 - Javascript

This works for me:

$('.data .title td[data-field!=""]')

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionShpigfordView Question on Stackoverflow
Solution 1 - JavascriptgmoView Answer on Stackoverflow
Solution 2 - JavascriptBenjamin OmanView Answer on Stackoverflow
Solution 3 - JavascriptSiva CharanView Answer on Stackoverflow
Solution 4 - JavascriptJelgabView Answer on Stackoverflow
Solution 5 - JavascriptDavid ThomasView Answer on Stackoverflow
Solution 6 - JavascriptDhirajView Answer on Stackoverflow
Solution 7 - JavascriptShanimalView Answer on Stackoverflow
Solution 8 - JavascriptadeneoView Answer on Stackoverflow
Solution 9 - JavascriptMardokView Answer on Stackoverflow
Solution 10 - JavascriptPascal BoutinView Answer on Stackoverflow
Solution 11 - Javascriptcn007bView Answer on Stackoverflow