我的客户想要为他拥有的静态 xml 文件中的条目创建一个搜索表单,并且不想使用服务器端技术。他希望它只在浏览器中使用 javascript。我有什么工作,除了如果你搜索有很多匹配条目的东西,它会锁定浏览器一段时间。我怎样才能防止这种情况?这是我所拥有的:
$(function(){
var root, searchEvent = setTimeout(function(){}, 0);
$.get('allitems.xml', function(xml){
root = $(xml);
});
$('#search-field').on('keyup', function(e){
clearTimeout(searchEvent);
searchEvent = setTimeout($.proxy(function(){search($(this).val());}, this), 500);
});
function search(q){
var results = 0;
$('#searchResults').empty();
root.find('Beskrivning').each(function(i, el){
/*if(results > 9)
return false;*/
el = $(el);
if(el.text().toLowerCase().indexOf(q) != -1){
addToResults(el.parent());
results++;
}
});
}
function addToResults(node){
var div = $('<a>').attr(
'href',
'http://www.pn-trading.se/Objekt/tabid/125/' +
(node.find('ID').text()) +
'/123055/auktion/' +
(node.find('paplatsnamn').text()) +
'/Default.aspx?tabselect=' +
(node.find('paplatsnamn').text())
)
.attr('target', '_blank')
.addClass('sr-item')
.append(
$('<div>').addClass('sr-item-image').append(
$('<img>').attr(
'src',
'http://www.pn-trading.se/Portals/0/' +
(node.find('katalog').text()) +
'/' + (node.find('bildnr').text()) + '-200.jpg'
)
),
$('<div>').addClass('sr-item-details').append($('<div>').html(node.find('Beskrivning').text()))
);
$('#searchResults').append(div);
}
});
它的工作原理是我抓取并缓存 xml 文件,然后在某个keyup
事件中搜索 xml 文件。有关使性能更好的任何提示?我知道在搜索甚至分页之前我可能需要至少 2-3 个字符,但如果可能的话,我宁愿远离这些选项。
此外,它需要适用于所有标准浏览器,包括 >= IE7