0

我正在尝试缓存this选择器,但无法使其工作。

$(function () {

   var $this = $(this);
    //some code

     $('.collapse').each(function(index) {
       $this.collapse("toggle");
     });

我在上面做错了什么?

$(function () {

   var self = $(this);

   $(document).on('click', '.expand-collapse', function(e) {

     $('.collapse').each(function(index) {
       self.collapse("toggle");
     });

     if self.is('.i .icon-white .icon-plus-sign')) {
        self.toggleClass("is-collapsed")
     }
     else {
         self.toggleClass('is-collapsed');
     } 
    });
});

我已经更新了上面的代码

4

2 回答 2

2

这实际上没有意义:如果您迭代元素,您不想仅在一个唯一元素上调用该函数。

你在这里没有任何可缓存的东西。

于 2013-03-06T20:16:38.467 回答
1

$(this) 在您定义的全局上下文中没有意义,因为它指的是整个文档。如果要缓存对单击/循环的单个对象的引用,请将变量放在事件处理程序/循环的上下文中。

在您的代码中,就目前而言,似乎没有任何理由“缓存”该引用,因为您可以简单地将当前对象引用为 $(this) 并获得相同的结果(除非您实际上正在尝试保留对整个文档的引用)。

此外,您的变量名称“self”是一个 javascript 词,它传统上指的是当前窗口对象,因此您正在覆盖该引用。我建议将该名称更改为 _self 或其他名称。

于 2013-03-06T21:09:45.963 回答