Javascript :has工作不正常
我正在使用$(':has')筛选出一棵树。它工作得很好,但是,要找到精确的匹配需要花费太多时间…这是我的代码Javascript :has工作不正常,javascript,jquery,Javascript,Jquery,我正在使用$(':has')筛选出一棵树。它工作得很好,但是,要找到精确的匹配需要花费太多时间…这是我的代码 function filterLeftNavTree(filterData){ jQuery("ul.treeview").find("li").hide(); if(filterData.indexOf("|")!=-1){ var Data = filterData.split("|"); for(i=0;i<Data.length;i++){
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();
} }
函数filterLeftNavTree(filterData){
jQuery(“ul.treeview”).find(“li”).hide();
if(filterData.indexOf(“|”)!=-1){
var Data=filterData.split(“|”);
对于(i=0;i试试这个:
1) 在拆分之前删除了对filterData的不必要检查
2) 将filterData字符串转换为jQuery选择器以避免循环。
3) 添加了包含选择器而不是has
function filterLeftNavTree(filterData){
jQuery("ul.treeview").find("li").hide();
var Data = filterData.replace("|", "), :contains(");
$(':contains('+ Data +')').show();
}
简单的回答是不要使用:has
;还有其他几种更快的方法来完成同样的事情
当通过ID或CSS类从DOM中选择元素时,$('#'+filterData)
或$('.+filterData)
将分别执行此操作,而不会产生更通用的选择器的开销,例如:has
要解决您的特定问题,请注意,可以通过用逗号分隔多个选择器来将它们传递给$()
例如:
var selectors = [];
for(i=0;i<Data.length;i++){
selectors.push('#'+Data);
}
var filtered = $(selectors.join(','));
var选择器=[];
对于(i=0;i当您在循环中引用数据时,您不应该检索特定的索引吗?-$(':has(#'+Data[i]+'))。show()
是的,这很好…我在这里键入时错过了这一点,但在实际代码中它很好实际上filterdata是一个包含多个由|分隔的字符串的字符串,所有这些值都对应于树中的一个节点..因此我试图隐藏filterdata字符串中的节点。我的代码工作正常,正如我在问题中所写的sing$('div:has(#'+Data+')).show();则其不起作用或,var filtered=$(“#”+Data.join(“,#”);