首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >类选择的jQuery迭代比id选择慢

类选择的jQuery迭代比id选择慢
EN

Stack Overflow用户
提问于 2013-06-07 19:50:53
回答 4查看 104关注 0票数 0

我必须迭代一组具有<li>s的<ul>,并根据输入的单词对其进行过滤。基于id的第一个代码运行良好。但问题是我们有重复的is,这破坏了过滤器。因此,我为class分配了is,并进行了类选择,现在它工作得很好,但有一些问题。主要问题是类选择过滤器比Id选择过滤器慢。因为它是一个很大的列表,所以在使用类名进行迭代时,我可能会遇到速度慢的问题。有没有办法让它更快些?另外,我想知道为什么类的选择会更慢!

下面是我基于id进行迭代的代码:

代码语言:javascript
复制
  $.each(propertiesList, function () {
    var item = $("#" + this.id).parent();
    if(this.property.toLowerCase().indexOf(value.toLowerCase()) === -1) {
      item.addClass('no-match');
    }
    else {
      item.parents('.root-property-category').show().addClass('expanded').children('ul').show();
      item.removeClass('no-match');
    }
  });

以下是基于类的迭代:

代码语言:javascript
复制
$.each(propertiesList, function () {
        var item = $("#available-properties [class*='" + this.id + "']").parent();
        if(this.property.toLowerCase().indexOf(value.toLowerCase()) === -1) {
            console.log(item)
          item.addClass('no-match');
        }
        else {
            console.log(item)
          item.parents('.root-property-category').show().addClass('expanded').children('ul').show();
          item.removeClass('no-match');
        }
      });
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-06-10 13:08:55

大家好,谢谢你的帮助..

最后,我用下面的方法修复了这个问题,希望这能对某些人有所帮助。

代码语言:javascript
复制
  $.each(propertiesList, function () {
    var item = $('[id="'+ this.id+'"]').parent();
    if(this.property.toLowerCase().indexOf(value.toLowerCase()) === -1) {
              item.addClass('no-match');
    }
    else {
            item.parents('.root-property-category').show().addClass('expanded').children('ul').show();
             item.removeClass('no-match');
    }
  });

$('[id="'+ this.id+'"]')选择所有具有id的元素,并且运行速度很快。

票数 0
EN

Stack Overflow用户

发布于 2013-06-07 19:58:43

使用class selector而不是attribute contains selector可以大大提高性能

代码语言:javascript
复制
var item = $("#available-properties ." + this.id).parent();
票数 2
EN

Stack Overflow用户

发布于 2013-06-07 20:03:07

试试这个:

代码语言:javascript
复制
var item = $("#available-properties").find("." + this.id).parent();

翻译成人类应该是:找到id为available-properties的元素,然后找到类为this.id的子类,然后找到子类的父类。

代码语言:javascript
复制
$("#available-properties [class*='" + this.id + "']")

说明:找到属性类为this.id的elemens,找到其中一个是id为available-properties的元素的子元素。效率要低得多。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16983451

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档