Javascript 如何使用jQuery.end()?
根据我在文档中读到的内容,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)。不是初始对象,即先前选
$(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()
。代码应该首先是正确的,然后是可读的,并且只有在不影响前两个的情况下尽可能简短。