Something like this can be used to extend the functionality of angular.element:
angular.element.prototype.closest = function closest( selector )
{
if( selector && selector.length )
{
var startChar = selector.substring( 0, 1 );
switch( startChar )
{
case '.':
return this.hasClass( selector.substring( 1, selector.length ) ) ? this : ( this.parent().length ? this.parent().closest( selector ) : this.parent() );
break;
case '#':
return selector.substring( 1, selector.length ) == this[0].id ? this : ( this.parent().length ? this.parent().closest( selector ) : this.parent() );
break;
default:
return ( this[0].tagName && selector.toLowerCase() == this[0].tagName.toLowerCase() ) ? this : ( this.parent().length ? this.parent().closest( selector ) : this.parent() );
break;
}
}
else
{
return this.parent();
}
}
source
share