Привет, ребята, я наткнулся на довольно изящный фильтр поиска фотоизображений, который ищет и обновляет картинки, чтобы показать, когда вы начинаете печатать. Ниже приведен полный код для создания собственного поиска изображений с помощью фида изображений из Flickr.
Код jQuery для поиска в реальном времени
$("#filter").keyup(function () { var filter = $(this).val(), count = 0; $(".filtered:first li").each(function () { if ($(this).text().search(new RegExp(filter, "i")) < 0) { $(this).addClass("hidden"); } else { $(this).removeClass("hidden"); count++; } }); $("#filter-count").text(count); }); [/js] Demo Source It uses the Live Search with QuickSilver Style jQuery plugin based upon the QuickSilver string ranking algorithm in JavaScript. QuickSilver Search Demo Quicksilver Live Search Plugin [js] (function($) { var self = null; $.fn.liveUpdate = function(list) { return this.each(function() { new $.liveUpdate(this, list); }); }; $.liveUpdate = function (e, list) { this.field = $(e); this.list = $('#' + list); if (this.list.length > 0) { this.init(); } }; $.liveUpdate.prototype = { init: function() { var self = this; this.setupCache(); this.field.parents('form').submit(function() { return false; }); this.field.keyup(function() { self.filter(); }); self.filter(); }, filter: function() { if ($.trim(this.field.val()) == '') { this.list.children('li').show(); return; } this.displayResults(this.getScores(this.field.val().toLowerCase())); }, setupCache: function() { var self = this; this.cache = []; this.rows = []; this.list.children('li').each(function() { self.cache.push(this.innerHTML.toLowerCase()); self.rows.push($(this)); }); this.cache_length = this.cache.length; }, displayResults: function(scores) { var self = this; this.list.children('li').hide(); $.each(scores, function(i, score) { self.rows[score[1]].show(); }); }, getScores: function(term) { var scores = []; for (var i=0; i < this.cache_length; i++) { var score = this.cache[i].score(term); if (score > 0) { scores.push([score, i]); } } return scores.sort(function(a, b) { return b[0] - a[0]; }); } } })(jQuery);
$("#filter").keyup(function () { var filter = $(this).val(), count = 0; $(".filtered:first li").each(function () { if ($(this).text().search(new RegExp(filter, "i")) < 0) { $(this).addClass("hidden"); } else { $(this).removeClass("hidden"); count++; } }); $("#filter-count").text(count); }); [/js] Demo Source It uses the Live Search with QuickSilver Style jQuery plugin based upon the QuickSilver string ranking algorithm in JavaScript. QuickSilver Search Demo Quicksilver Live Search Plugin [js] (function($) { var self = null; $.fn.liveUpdate = function(list) { return this.each(function() { new $.liveUpdate(this, list); }); }; $.liveUpdate = function (e, list) { this.field = $(e); this.list = $('#' + list); if (this.list.length > 0) { this.init(); } }; $.liveUpdate.prototype = { init: function() { var self = this; this.setupCache(); this.field.parents('form').submit(function() { return false; }); this.field.keyup(function() { self.filter(); }); self.filter(); }, filter: function() { if ($.trim(this.field.val()) == '') { this.list.children('li').show(); return; } this.displayResults(this.getScores(this.field.val().toLowerCase())); }, setupCache: function() { var self = this; this.cache = []; this.rows = []; this.list.children('li').each(function() { self.cache.push(this.innerHTML.toLowerCase()); self.rows.push($(this)); }); this.cache_length = this.cache.length; }, displayResults: function(scores) { var self = this; this.list.children('li').hide(); $.each(scores, function(i, score) { self.rows[score[1]].show(); }); }, getScores: function(term) { var scores = []; for (var i=0; i < this.cache_length; i++) { var score = this.cache[i].score(term); if (score > 0) { scores.push([score, i]); } } return scores.sort(function(a, b) { return b[0] - a[0]; }); } } })(jQuery);
$("#filter").keyup(function () { var filter = $(this).val(), count = 0; $(".filtered:first li").each(function () { if ($(this).text().search(new RegExp(filter, "i")) < 0) { $(this).addClass("hidden"); } else { $(this).removeClass("hidden"); count++; } }); $("#filter-count").text(count); }); [/js] Demo Source It uses the Live Search with QuickSilver Style jQuery plugin based upon the QuickSilver string ranking algorithm in JavaScript. QuickSilver Search Demo Quicksilver Live Search Plugin [js] (function($) { var self = null; $.fn.liveUpdate = function(list) { return this.each(function() { new $.liveUpdate(this, list); }); }; $.liveUpdate = function (e, list) { this.field = $(e); this.list = $('#' + list); if (this.list.length > 0) { this.init(); } }; $.liveUpdate.prototype = { init: function() { var self = this; this.setupCache(); this.field.parents('form').submit(function() { return false; }); this.field.keyup(function() { self.filter(); }); self.filter(); }, filter: function() { if ($.trim(this.field.val()) == '') { this.list.children('li').show(); return; } this.displayResults(this.getScores(this.field.val().toLowerCase())); }, setupCache: function() { var self = this; this.cache = []; this.rows = []; this.list.children('li').each(function() { self.cache.push(this.innerHTML.toLowerCase()); self.rows.push($(this)); }); this.cache_length = this.cache.length; }, displayResults: function(scores) { var self = this; this.list.children('li').hide(); $.each(scores, function(i, score) { self.rows[score[1]].show(); }); }, getScores: function(term) { var scores = []; for (var i=0; i < this.cache_length; i++) { var score = this.cache[i].score(term); if (score > 0) { scores.push([score, i]); } } return scores.sort(function(a, b) { return b[0] - a[0]; }); } } })(jQuery);
Полный код для поиска изображений
/ *
* jQuery Filter Demo
* Мэтт Рьялл
* http://www.mattryall.net/blog/2008/07/jquery-filter-demo
*
* Лицензировано под Creative Commons Attribution 3.0.
* http://creativecommons.org/licenses/by/3.0/
* /
jQuery (функция ($) {
var thumbnailUrl = «http: // farm {идентификатор фермы} .static.flickr.com / {идентификатор сервера} / {id} _ {secret} _s.jpg»;
var linkUrl = «http://www.flickr.com/photos/mjryall/ enjid‹/»;
$ .getJSON («/ flickr-photos.cgi? count = 50», функция (данные) {
var photos = data.photos.photo;
var list = $ («
«) .Attr (« src », url)
.attr («title», photo.title) .attr («alt», «Фотография на Flickr»);
var href = linkUrl.replace («{id}», photo.id);
var link = $ (« «) .Attr (« href », href) .append (img);
var caption = $ (« «) .Attr (« href », href)
.text (photo.title) .addClass ( «Подпись»);
var div = $ («
«) .Append (ссылка) .append (подпись);
$ (Список) .append ($ ( «
«) .Append (дела));
});
$ («# Flickr-photos .loading»). Remove ();
$ ( «#-фотографии на Flickr») Append (список).
})
$ («# Фильтр»). Keyup (function () {
var filter = $ (this) .val (), count = 0;
$ («. Filter: первый li»). Each (function () {
if ($ (this) .text (). search (new RegExp (filter, «i»)) <0) {$ (this) .addClass («скрытый»); } else {$ (this) .removeClass ("hidden"); подсчитывать ++; }}); . $ ( "Фильтр-счетчик #") текст (количество); }); }); [/ JS]