Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/81.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 如何使用jQuery.end()?_Javascript_Jquery_Jquery Selectors - Fatal编程技术网

Javascript 如何使用jQuery.end()?

Javascript 如何使用jQuery.end()?,javascript,jquery,jquery-selectors,Javascript,Jquery,Jquery Selectors,根据我在文档中读到的内容,end()将返回初始对象。在我的例子中,这应该返回$(this),对吗 $('.el').delegate('a.off', 'click', function(){ $(this).parents('div').find('a').removeClass('active').end().addClass('active'); ... }); 但它似乎不起作用。我没有将addClass('active')应用于原始元素(链接a.off)。不是初始对象,即先前选

根据我在文档中读到的内容,end()将返回初始对象。在我的例子中,这应该返回
$(this)
,对吗

$('.el').delegate('a.off', 'click', function(){
  $(this).parents('div').find('a').removeClass('active').end().addClass('active');
  ...
});

但它似乎不起作用。我没有将
addClass('active')
应用于原始元素(链接
a.off
)。

不是初始对象,即先前选择的元素,在本例中,它将是
.parents('div')
。将其视为一个堆栈,每次更改元素的选择时,它们都会添加到堆栈中,
.end()
会删除堆栈的最后一个条目。您必须调用
.end()
两次

但是,您也可以重新安排方法调用,并使用
not
筛选出特定元素:

$(this)
  .addClass('active')
  .parents('div')
  .find('a').not(this)
  .removeClass('active');

不是初始对象,而是先前选择的元素,在本例中,这些元素将是
.parents('div')
。将其视为一个堆栈,每次更改元素的选择时,它们都会添加到堆栈中,
.end()
会删除堆栈的最后一个条目。您必须调用
.end()
两次

但是,您也可以重新安排方法调用,并使用
not
筛选出特定元素:

$(this)
  .addClass('active')
  .parents('div')
  .find('a').not(this)
  .removeClass('active');

您的理解是正确的,但我不确定您的代码发生了什么,我制作了这个示例,它是有效的:


没关系。我错过了“removeClass”部分。

您的理解是正确的,但我不确定您的代码发生了什么,我制作了这个示例,它可以工作:


没关系。我错过了“removeClass”部分。

就我个人而言,我更喜欢可读性更强的代码,而不是那些带有难以理解/阅读的复杂堆栈操作的长jQuery链。只需添加:
$(this.addClass('active')
作为单击处理程序的第二行,并跳过使用
.end()
。代码首先应该是正确的,然后才是可读的,并且在不影响前两个的情况下尽可能简短。就我个人而言,我更喜欢可读性更强的代码,而不是那些带有难以理解/读取的复杂堆栈操作的长jQuery链。只需添加:
$(this.addClass('active')
作为单击处理程序的第二行,并跳过使用
.end()
。代码应该首先是正确的,然后是可读的,并且只有在不影响前两个的情况下尽可能简短。