Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Prototype equivalent for jQuery closest function

Is there any equivalent in Prototype for the jQuery closest function?

http://api.jquery.com/closest/

thanks

like image 714
denisjacquemin Avatar asked Mar 02 '10 20:03

denisjacquemin


2 Answers

You can use the up method. It is not quite equivalent, since closest also considers the current element. So you would need to first test your selected element to see if it matches your criteria, if it does not, use the up-method:

jQuery:
return $('#id').closest('li');

Prototype:
var element = $('id')
return element.match('li') ? element : element.up('li');
}

Comparison:

.closest()

  • Begins with the current element
  • Travels up the DOM tree until it finds a match for the supplied selector
  • Returns a jQuery object that contains zero or one element

.up()

  • Begins with the parent element
  • Travels up the DOM tree until it finds a match for the supplied selector
  • Returns an extended Element object, or undefined if it doesn't match

You can easily extend Prototype to include this method for all elements like so:

// Adds a closest-method (equivalent to the jQuery method) to all 
// extended Prototype DOM elements
Element.addMethods({
   closest: function closest (element, cssRule) {
      var $element = $(element);
      // Return if we don't find an element to work with.
      if(!$element) {
         return;
      }
      return $element.match(cssRule) ? $element : $element.up(cssRule);
   }
});
like image 193
PatrikAkerstrand Avatar answered Oct 31 '22 12:10

PatrikAkerstrand


.next('.className') or .next('divId')

There is also .previous(), .down() and .up(), depending on where you're looking.

like image 33
Diodeus - James MacFarlane Avatar answered Oct 31 '22 12:10

Diodeus - James MacFarlane