Javascript 使用';搜索';方法在<;李>;及<;李>;标签
此函数当前通过Javascript 使用';搜索';方法在<;李>;及<;李>;标签,javascript,jquery,search,Javascript,Jquery,Search,此函数当前通过元素内的文本过滤元素。如何修改它,使其也能按标记(如数据属性)内的文本进行过滤 我已尝试将($(this).text().search(…)更改为($(this).search(…),但这使函数无法完全工作 我在这里发布了一个工作示例: $(文档).ready(函数(){ $('#list li').addClass('visible'); $(“#搜索”).show(); $(“#过滤器”).keyup(函数(事件){ if(event.keyCode==27 | |$(this
元素内的文本过滤元素。如何修改它,使其也能按
标记(如数据属性)内的文本进行过滤
我已尝试将($(this).text().search(…)
更改为($(this).search(…)
,但这使函数无法完全工作
我在这里发布了一个工作示例:
$(文档).ready(函数(){
$('#list li').addClass('visible');
$(“#搜索”).show();
$(“#过滤器”).keyup(函数(事件){
if(event.keyCode==27 | |$(this.val()=''){
$(this.val(“”);
$('#list li').removeClass('visible').show().addClass('visible');
}
否则{
过滤器('#list li',$(this.val());
}
});
});
函数过滤器(选择器、查询){
查询=$.trim(查询);
query=query.replace(//gi,“|”);
$(选择器)。每个(函数(){
($(this).text().search(new RegExp(query,“i”)<0)?$(this.hide().removeClass('visible'):$(this.show().addClass('visible');
});
}
您可以尝试以下方法:
$(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');
});
$(选择器)。每个(函数(){
变量数据=$.map($(this).data(),函数(el){
返回el;
}).加入(“”);
($(this.text()+''+data).search(新的RegExp(查询,“i”)))<0
?$(this.hide().removeClass('visible'))
:$(this.show().addClass('visible');
});
$(this).data()
返回所有的数据属性,然后可以将这些属性连接到字符串中。如果我输入g
,为什么会出现项1
?@Bingo-因为项1中的数据属性包含“g”(data style=“Long-sleets,V-Neck”)@dfsq-您介意解释一下“$.map($(这个)'还有?我从未使用过'map'函数;-)@ChayaCooper$(this).data()
是数据属性、键值的对象。和$.map(obj,callback)
根据回调返回的值从obj
中创建新数组obj
可以是object或array。类似这样的东西???@adeneo-是的,谢谢:-)我接受了下面的答案,因为它不区分大小写(因此它更能反映我发布的代码),但绝对支持:-)
$(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');
});