我正在使用 $(':has')过滤掉一棵树......工作正常,但是花了太多时间找出确切的匹配...这是我的代码< / p>
function filterLeftNavTree(filterData){
jQuery("ul.treeview").find("li").hide();
if(filterData.indexOf("|")!=-1){
var Data = filterData.split("|");
for(i=0;i<Data.length;i++){
$(':has(#'+Data[i] +')').show();
}
}else{
$(':has(#'+filterData+')').show();
} }
当我使用$('div:has(#'+Data +')').show();
提高速度时......
然后它没有显示完全匹配...
我做错了什么......?
我也试过 .find() ..但无法获得所需的解决方案...
任何建议,以便我可以提高此代码的性能。 提前谢谢。
答案 0 :(得分:1)
简短的回答是不使用:has
;还有其他几种更快的方法来完成同样的事情。
当通过ID或CSS类选择DOM中的元素时,$('#' + filterData)
或$('.' + filterData)
将分别执行此操作,而不会产生更通用的选择器(例如:has
)的开销
要解决您的具体问题,请注意可以通过用逗号分隔多个选择器来传递给$()
。
例如:
var selectors = [];
for(i=0;i<Data.length;i++){
selectors.push('#'+Data);
}
var filtered = $(selectors.join(','));
答案 1 :(得分:0)
试试这个: 1)拆分前删除不必要的过滤器数据检查 2)将filterData字符串转换为jQuery选择器以避免循环。 3)添加了包含选择器而不是
function filterLeftNavTree(filterData){
jQuery("ul.treeview").find("li").hide();
var Data = filterData.replace("|", "), :contains(");
$(':contains('+ Data +')').show();
}