Javascript 在循环jquery中筛选$(this)元素
我正在尝试对Javascript 在循环jquery中筛选$(this)元素,javascript,jquery,Javascript,Jquery,我正在尝试对$(this)项以外的其他元素执行操作 $('.items').click(function(){ var myitem = $(this); $(".items").each(function() { if (myitem == $(this)){ break; } else { //perform action } }); }); 我哪里出错了?有没有
$(this)
项以外的其他元素执行操作
$('.items').click(function(){
var myitem = $(this);
$(".items").each(function() {
if (myitem == $(this)){
break;
} else {
//perform action
}
});
});
我哪里出错了?有没有更好的方法?尝试使用.not()
函数过滤掉当前元素
$('.items').click(function(){
$('.items').not(this).each(function(){
//perform action here.
});
});
使用.not()
避免
试试这个
$(".items").not($(this)).each(function() {
});
或
按照你的代码
$(".items").not(myitem).each(function() {
});
您可以使用not()
忽略单击的元素:
$(".items").not(this).each(function() {
});
出了什么问题?
当使用
jQuery
方法(也称为$
)时,将创建jQuery对象的新实例,其中包含与选择器匹配的元素列表以及jQuery方法的丰富原型
您的错误是尝试比较两个不同的实例
您可以通过进行以下更改来比较元素本身:
// change this:
var myitem = $(this);
// to this:
var myitem = this;
// change this:
if (myitem == $(this)){
// to this:
if (myitem == this){
除非您打算使用jQuery对象功能,否则没有理由启动新实例。只要在可能的情况下使用元素本身。这是避免此类用例的最佳实践。性能方面
最佳解决方案
但在您的情况下,最好的解决方案是所有其他答案中提到的,使用jQuery的方法从新创建的实例中排除元素。您的意思是
$(this)
而不是this
?@EhsanSajjad why$(this)?我认为单用“this”就足够了,但创建一个列表实例在这种情况下是多余的。很抱歉@imose在使用jQuery
方法(也称$
)时没有得到您的支持。将创建一个jQuery
的新实例,其中包含与您的选择器匹配的元素列表。绝对没有理由这样做,避免此类用例将是最佳实践。性能方面。您不是在具有相同类项的每个元素中添加了不同的ID吗。如果您添加了ID,那么您还可以检查ID。所以你只需跳过点击的元素。很好的答案+1.,而且他不应该在代码中使用“break;”。这将导致循环退出。