0% found this document useful (0 votes)
525 views

Jquery Quicksearch Js

This JavaScript function defines a quicksearch plugin that allows adding a search form to filter and highlight search results on a page. It takes options like where to position the form, what to label it, and how to style it. It caches content, tests search keys against the cache, handles loading indicators, and highlights search matches.

Uploaded by

theealok
Copyright
© Attribution Non-Commercial (BY-NC)
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
525 views

Jquery Quicksearch Js

This JavaScript function defines a quicksearch plugin that allows adding a search form to filter and highlight search results on a page. It takes options like where to position the form, what to label it, and how to style it. It caches content, tests search keys against the cache, handles loading indicators, and highlights search matches.

Uploaded by

theealok
Copyright
© Attribution Non-Commercial (BY-NC)
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
You are on page 1/ 6

;(function( $ ){

$.fn.quicksearch = function(options) {
options = jQuery.extend({
position: 'prepend',
attached: 'body',
formId: 'quicksearch',
labelText: 'Quick Search',
labelClass: 'qs_label',
inputText: null,
inputClass: 'qs_input',
loaderId: 'loader',
loaderClass: 'loader',
loaderImg: null,
loaderText: 'Loading...',
stripeRowClass: null,
hideElement: null,
delay: 500,
focusOnLoad: false,
randomElement: 'qs'+Math.floor(Math.random()*1000000)
}, options);
var timeout;
var cache;
var score = {};
var el = this;
var stripeRowLength = (!is_empty(options.stripeRowClass)) ? opti
ons.stripeRowClass.length : 0;
var doStripe = (stripeRowLength > 0) ? true : false;
function is_empty (i)
{
return (i == null || i == undefined || i == false) ? tru
e: false;
}
function get_cache (el)
{
cache = $(el).not('.'+options.noResultsClass).map(functi
on(){
return strip_html(normalise(this.innerHTML));
});
}
function normalise (i)
{
return $.trim(i.toLowerCase().replace(/\n/, '').replace(
/\s{2,}/, ' '));
}
function get_key()
{
var input = strip_html(normalise($('input[rel="' + optio
ns.randomElement + '"]').val()));
if (input.indexOf(' ') == -1)
{
return input;
}
else
{
return input.split(" ");
}
}
function test_key(k, value, type)
{
if (type == "string")
{
return test_key_string(k, value);
}
else
{
return test_key_arr(k, value);
}
}
function test_key_string(k, value)
{
return (value.indexOf(k) > -1);
}
function test_key_arr(k, value)
{
for (var i = 0; i < k.length; i++) {
var test = value.indexOf(k[i]);
if (test == -1) {
return false;
}
}
return true;
}
function strip_html (input)
{
var regexp = new RegExp(/\<[^\<]+\>/g);
var output = input.replace(regexp, "");
output = output.toLowerCase();
return output;
}
function select_element (el)
{
if(options.hideElement == "grandparent")
{
return $(el).parent().parent();
}
else if (options.hideElement == "parent")
{
return $(el).parent();
}
else
{
return $(el);
}
}
function stripe (el)
{
if (doStripe)
{
var i = 0;
select_element(el).filter(':visible').each(funct
ion () {
for (var j = 0; j < stripeRowLength; j++
)
{
if (i == j)
{
$(this).addClass(options
.stripeRowClass[i]);
}
else
{
$(this).removeClass(opti
ons.stripeRowClass[j]);
}
}
i = (i+1) % stripeRowLength;
});
}
}
function loader (o) {
if(options.loaderId)
{
var l = $('input[@rel="'+options.randomElement+'
"]').parent().find('.loader');
if(o == 'hide')
{
l.hide();
}
else
{
l.show();
}
}
}
function place_form () {
var formPosition = options.position;
var formAttached = options.attached;
if(formPosition == 'before') {
$(formAttached).before( make_form() );
} else if(formPosition == 'prepend') {
$(formAttached).prepend( make_form() );
} else if(formPosition == 'append') {
$(formAttached).append( make_form() );
} else {
$(formAttached).after( make_form() );
}
}
function make_form ()
{
return '<form action="#" ' + 'id="'+ options.formId + '"
' + 'class="quicksearch">' +
make_form_label() + make_for
m_input() + make_form_loader() +
'</form>';
}
function make_form_label ()
{
if(!is_empty(options.labelText)) {
return '<label for="' + options.randomElement +
'" '+
'class="' + options.labe
lClass + '">'
+ options.labelText
+ '</label> ';
}
return '';
}
function make_form_input ()
{
var val = (!is_empty(options.inputText)) ? options.input
Text : ""
return '<input type="text" value="' + val + '" rel="' +
options.randomElement + '" class="' + options.inputClass + '" id="'+options.ran
domElement+'" /> ';
}
function make_form_loader ()
{
if(!is_empty(options.loaderImg)) {
return '<img src="' + options.loaderImg + '" alt
="Loading" id="' + options.loaderId + '" class="' + options.loaderClass + '" />'
;
} else {
return '<span id="' + options.loaderId + '" clas
s="' + options.loaderClass + '">' + options.loaderText + '</span>';
}
}
function focus_on_load ()
{
$('input[rel="' + options.randomElement + '"]').get(0).f
ocus();
}
function toggle_text () {
$('input[rel="' + options.randomElement + '"]').focus(fu
nction () {
if($(this).val() == options.inputText) {
$(this).val('');
}
}),
$('input[rel="' + options.randomElement + '"]').blur(fun
ction () {
if($(this).val() == "") {
$(this).val(options.inputText);
}
})
};
function init ()
{
place_form();
if(options.focusOnLoad) {
focus_on_load();
}
if(options.inputText != "" && options.inputText != null)
{
toggle_text();
}
get_cache(el);
stripe(el);
loader('hide');
}
function qs ()
{
clearTimeout(timeout);
timeout = setTimeout(function () {
loader('show');
setTimeout(function () {
var k = get_key();
var k_type = (typeof k);
var i = 0;
if (k != "")
{
if (typeof score[k] == "undefine
d")
{
score[k] = new Array();
cache.each(function (i)
{
if (test_key(k,
cache[i], k_type))
{
score[k]
[i] = true;
}
});
}
if (score[k].length == 0)
{
select_element(el).hide(
);
}
else
{
$(el).not('.'+options.no
ResultsClass).each(function (i) {
if (score[k][i])
{
select_e
lement(this).show();
}
else
{
select_e
lement(this).hide();
}
});
}
}
else
{
select_element(el).show();
}
stripe(el);
}, options.delay/2);
setTimeout( function () {
loader('hide');
}, options.delay/2);
}, options.delay/2);
}
init();
$('input[rel="' + options.randomElement + '"]').keydown(function
(e) {
var keycode = e.keyCode;
if (!(keycode == 9 || keycode == 13 || keycode == 16 ||
keycode == 17 || keycode == 18 || keycode == 38 || keycode == 40 || keycode == 2
24))
{
qs();
}
});
$('form.quicksearch').submit( function () { return false; });
}
})( jQuery );

You might also like