2

I want to select all elements that have an accesskey defined on them.

I know that i can do this: $('[accesskey]'), but that gives me lot of inputs, hrefs etc, on the page (most of them have an empty accesskey).

What is the way to select only the elements where the accesskey actually has a value?

Edit: I found the cause of the empty accesskeys as well, was caused by some old disable / restore accesskeys javascript functions over multiple modal dialogs.. normally you won't get that much elements with empty accesskeys

2
  • You can check this post... stackoverflow.com/questions/1097522/… Commented Jun 15, 2012 at 9:32
  • @Subhajit: that post is about the existance of an attribute. My question is about an attribute that should have a value, not just the existance of it. Commented Jun 15, 2012 at 10:26

3 Answers 3

2

With one selector:

$('[accesskey][accesskey!=""]').foo

How does it work:

// Has the accesskey attribute defined.
[accesskey]

// Doesn't have an empty value for the accesskey attribute.
[accesskey!=""]

Together it select every element which has the accesskey attributes and it's not empty.

Sign up to request clarification or add additional context in comments.

Comments

1

You can do this

$('[accesskey]').filter(function(){
    return $(this).prop('accessKey');
});

.filter() or like other have already said you can use the attribute-not-equal-selector

Working sample

2 Comments

@thecodeparadox, Thanks. attr is fixing that. I thought attr and prop is interchangeable. Can you please correct me?
@thecodeparadox. By the way, the problem was with your fiddle, prop works just fine... Please don't tell people they are "totally wrong" specially when they are not. :( And joy, you do need to change accesskey to accessKey if you're using prop, properties are case sensitive while attributes are not. Good luck for you both...
0

you can use and additional loop

$("[accesskey]").each(function() {
    if($(this)).attr('accesskey').length > 0) {
        // do it
    }
}

i hope it will help you

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.