:已经无法正常工作

时间:2011-01-06 06:32:39

标签: javascript jquery

我正在使用 $(':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() ..但无法获得所需的解决方案...

任何建议,以便我可以提高此代码的性能。 提前谢谢。

2 个答案:

答案 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();
}