(function($){ $.fn.extend({ highlight: function(strings) { function findText(node, string) { if (node.nodeType == 3) return searchText(node, string); else if (node.nodeType == 1 && node.childNodes && !(/(script|style)/i.test(node.tagName))) { for (var i = 0; i < node.childNodes.length; ++i) { i += findText(node.childNodes[i], string); } } return 0; } function searchText(node, string){ var position = node.data.toUpperCase().indexOf(string); if (position >= 0) return highlight(node, position, string); else return 0; } function highlight(node, position, string){ var spannode = document.createElement('span'); spannode.className = 'highlight'; var middlebit = node.splitText(position); var endbit = middlebit.splitText(string.length); var middleclone = middlebit.cloneNode(true); spannode.appendChild(middleclone); middlebit.parentNode.replaceChild(spannode, middlebit); return 1; } return this.each(function() { if(typeof strings == 'string') findText(this, strings.toUpperCase()); else for (var i = 0; i < strings.length; ++i) findText(this, strings[i].toUpperCase()); }); } }); })(jQuery);