此功能目前通过<li>
元素内的文本过滤<li>
个元素。如何修改它以便它也会按<li>
标记内的文字(例如数据属性)&gt;进行过滤。
我已尝试将($(this).text().search(...))
更改为($(this).search(...))
,但这只会阻止该功能完全正常工作。
我在这里发布了一个工作示例的小提琴:http://jsfiddle.net/chayacooper/sMEbN/
$(document).ready(function () {
$('#list li').addClass('visible');
$('#search').show();
$('#filter').keyup(function(event) {
if (event.keyCode == 27 || $(this).val() == '') {
$(this).val('');
$('#list li').removeClass('visible').show().addClass('visible');
}
else {
filter('#list li', $(this).val());
}
});
});
function filter(selector, query) {
query = $.trim(query);
query = query.replace(/ /gi, '|');
$(selector).each(function() {
($(this).text().search(new RegExp(query, "i")) < 0) ? $(this).hide().removeClass('visible') : $(this).show().addClass('visible');
});
}
答案 0 :(得分:2)
您可以尝试这样的事情:
$(selector).each(function () {
var data = $.map($(this).data(), function (el) {
return el;
}).join(' ');
($(this).text() + ' ' + data).search(new RegExp(query, "i")) < 0
? $(this).hide().removeClass('visible')
: $(this).show().addClass('visible');
});
$(this).data()
返回所有数据属性,然后可以将它们连接成字符串。