【问题标题】:.removeClass for more than one cached selector.removeClass 用于多个缓存选择器
【发布时间】:2016-03-06 15:48:06
【问题描述】:

通过缓存多次使用的选择器来优化一些 js/jQuery 代码,以帮助加快速度,例如:

var object = $("#object");
object.removeClass('class-name');

我在链接缓存的选择器时遇到了麻烦,这是我的尝试:

var object1 = $("#object1");
var object2 = $("#object2");
$(object1, object2).removeClass('class-name');

这适用于第一个缓存元素,但不适用于第二个,关于正确语法的任何想法?
我已经搜索过,但似乎找不到任何东西!

【问题讨论】:

    标签: javascript jquery html css caching


    【解决方案1】:

    使用.add()

    创建一个新的 jQuery 对象,并将元素添加到匹配的元素集中。

    object1.add(object2).removeClass('class-name');
    

    【讨论】:

    • 效果很好,谢谢!一旦 10 分钟的时间限制结束,我会将您的设置为答案。如果缓存的选择器超过 2 个呢?
    • @JacobBanner,你可以继续使用add(),比如object1.add(object2).add(object3)
    【解决方案2】:

    Satpal 的答案非常简单,但如果您想要一个替代方案(处理更多类而不是以巨大的 jquery 链结束),您可以将 jquery 对象保存在一个数组中并使用迭代:

    "use strict";
    var arr = [];
    var object1 = $("#object1");
    var object2 = $("#object2");
    arr.push(object1, object2)
    for (var e of arr) {
      e.removeClass("class-name");
    }
    .class-name {
      color: red;
    }
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <div id="object1" class="class-name">this</div>
    <div id="object2" class="class-name">this</div>
    <div id="object3" class="class-name">this</div>

    【讨论】:

      【解决方案3】:

      同时使用这两个选择器是您可以使用的另一种选择:

      $('#object1, #object2').removeClass('class-name');
      

      【讨论】:

      • 我可能错了,但我认为引用元素本身,而不是没有性能提升的缓存选择器
      • 哦,是的,这是我的错。我现在了解到,这不是缓存选择器的解决方案。
      • 谢谢你的回答,伙计! :)
      猜你喜欢
      • 2016-09-22
      • 2011-02-17
      • 2013-02-04
      • 2012-08-29
      • 1970-01-01
      • 2013-10-10
      • 2018-09-22
      • 2014-09-05
      • 1970-01-01
      相关资源
      最近更新 更多