views:

910

answers:

3

Say I have 4 div elements with class .navlink, which, when clicked, use .data() to set a key called 'selected', to a value of true:

$('.navlink')click(function() { $(this).data('selected', true); })

Every time a new navlink is clicked, I would like to store the previously selected navlink for later manipulation. Is there a quick and easy way to select an element based on what was stored using .data()?

There don't seem to be any jQuery :filters that fit the bill, and I tried the following (within the same click event), but for some reason it doesn't work:

var $previous = $('.navlink').filter( 
            function() { $(this).data("selected") == true }
             );

I know that there are other ways to accomplish this, but right now I'm mostly just curious if it can be done via .data().

Thanks.

A: 

Sounds like more work than its worth.

1) Why not just have a single JavaScript variable that stores a reference to the currently selected element\jQuery object.

2) Why not add a class to the currently selected element. Then you could query the DOM for the ".active" class or something.

Bryan Migliorisi
Yeah, but like I said, I knew there were other ways to accomplish it. I was just stuck on whether it could be filtered via data(), and why filter() wasn't working for me.Thanks though.
patrick dw
Sorry. I missed that part of your question.
Bryan Migliorisi
+2  A: 

Two things I noticed (they may be mistakes from when you wrote it down though).

  1. You missed a dot in the first example ( $('.navlink).click )
  2. For filter to work, you have to return a value ( return $(this).data("selected")==true )
Thomas
It was a typo in the question, but not in my code. My sloppy. Thumbs up on the return statement. Thanks.
patrick dw
+3  A: 

your filter would work, but you need to return true on matching objects in the function passed to the filter for it to grab them.

var $previous = $('.navlink').filter(function() { 
  return $(this).data("selected") == true 
});
BaroqueBobcat
That was it. Can't believe I missed that. Thanks!
patrick dw