Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript :has工作不正常_Javascript_Jquery - Fatal编程技术网

Javascript :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++){

我正在使用$(':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++){
    $(':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(“,#”);