글 수 47
index.html
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title>Mini Help System with jQuery | Tutorialzine </title> <!-- Our stylesheet --> <link rel="stylesheet" href="assets/css/styles.css" /> </head> <body> <div id="widget"> <div id="header"> <input type="text" id="search" placeholder="Search in the text" /> </div> <div id="content"> <!-- Your help text goes here --> </div> </div> <!-- JavaScript Includes --> <script src="http://code.jquery.com/jquery-1.8.3.min.js"></script> <script src="assets/js/highlight.jquery.js"></script> <script src="assets/js/jquery.scrollTo.min.js"></script> <script src="assets/js/script.js"></script> </body> </html>
assets/js/highlight.jquery.js
(function($) { var termPattern; $.fn.highlight = function(term, callback) { return this.each(function() { var elem = $(this); if (!elem.data('highlight-original')) { // Save the original element content elem.data('highlight-original', elem.html()); } else { // restore the original content elem.highlightRestore(); } termPattern = new RegExp('(' + term + ')', 'ig'); // Search the element's contents walk(elem); // Trigger the callback callback && callback(elem.find('.match')); }); }; $.fn.highlightRestore = function() { return this.each(function() { var elem = $(this); elem.html(elem.data('highlight-original')); }); }; function walk(elem) { elem.contents().each(function() { if (this.nodeType == 3) { // text node if (termPattern.test(this.nodeValue)) { // wrap the match in a span: $(this).replaceWith(this.nodeValue.replace(termPattern, '<span class="match">$1</span>')); } } else { // recursively call the function on this element walk($(this)); } }); } })(jQuery);
assets/js/script.js
$(function() { var search = $('#search'), content = $('#content'), matches = $(), index = 0; // Listen for the text input event search.on('input', function(e) { // Only search for strings 2 characters or more if (search.val().length >= 2) { // Use the highlight plugin content.highlight(search.val(), function(found) { matches = found; if(matches.length && content.is(':not(:animated)')){ scroll(0); } }); } else { content.highlightRestore(); } }); search.on('keypress', function(e) { if(e.keyCode == 13){ // The enter key scrollNext(); } }); function scroll(i){ index = i; // Trigger the scrollTo plugin. Limit it // to the y axis (vertical scroll only) content.scrollTo(matches.eq(i), 800, { axis:'y' } ); } function scrollNext(){ matches.length && scroll( (index + 1) % matches.length ); } });