jQuery.fn.highlight = function(selector, className, eventStart, eventEnd){ // variables var className = className || 'highlight'; if(eventStart == undefined && eventEnd == undefined){ var eventStart = 'mouseover'; var eventEnd = 'mouseout'; } else if(eventStart == eventEnd || eventStart != undefined && eventEnd == undefined){ var toggle = true; } // code this.each ( function(){ var tagName = this.tagName.toLowerCase(); if(tagName == 'form'){ selector = selector || 'tr'; var elements = jQuery("textarea, select, multi-select, :text, :image, :password, :radio, :checkbox, :file", this); elements.bind ( 'focus', function(){ var parents = jQuery(this).parents(selector) var parent = jQuery(parents.get(0)) parent.addClass(className); } ); elements.bind ( 'blur', function(){ var parents = jQuery(this).parents(selector) var parent = jQuery(parents.get(0)) parent.removeClass(className); } ); } else{ if(tagName.match(/^(table|tbody)$/) != null){ selector = selector || 'tr'; } else if(tagName.match(/^(ul|ol)$/) != null){ selector = selector || 'li'; } else{ selector = '*'; } var elements = jQuery(selector, this); if(toggle){ elements.bind ( eventStart, function(){ if(jQuery(this).hasClass(className)){ jQuery(this).removeClass(className); } else{ jQuery(this).addClass(className); } } ); } else{ elements.bind ( eventStart, function(){ jQuery(this).addClass(className); } ); elements.bind ( eventEnd, function(){ jQuery(this).removeClass(className); } ); } } } ); }