Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.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-未标识为相等的DOM元素_Javascript_Jquery - Fatal编程技术网

Javascript jQuery-未标识为相等的DOM元素

Javascript jQuery-未标识为相等的DOM元素,javascript,jquery,Javascript,Jquery,可能重复: 我正在使用jQuery将主动单击的项存储在一个项列表中。我想检测新单击的项目是否与先前单击的项目相同,以切换支持div的可见性。我的代码如下所示: var curPin; $('.pin').click(function(){ var $pin = $(this); if (curPin == $pin){ console.log('true'); } else { curPin = $pin; console.log('false');

可能重复:

我正在使用jQuery将主动单击的项存储在一个项列表中。我想检测新单击的项目是否与先前单击的项目相同,以切换支持
div
的可见性。我的代码如下所示:

var curPin;

$('.pin').click(function(){
  var $pin = $(this);
  if (curPin == $pin){
    console.log('true');
  } else {
    curPin = $pin;
    console.log('false');
  }
}

为什么这不是平等的呢?有更好的方法吗?

您不是在比较元素,但是jQuery对象和jQuery对象总是被认为是不同的,即使它们包含完全相同的元素

比较DOM元素本身确实可以解决您的问题。根据Esailija的建议,您可以使用该方法检查存储在
curPin
中的jQuery对象是否包含当前元素:

var curPin;

$(".pin").click(function() {
    var $pin = $(this);
    if (curPin.is(this)) {
        console.log("true");
    } else {
        curPin = $pin;
        console.log("false");
    }
}

您没有比较元素,但是jQuery对象和jQuery对象总是被认为是不同的,即使它们包含完全相同的元素

比较DOM元素本身确实可以解决您的问题。根据Esailija的建议,您可以使用该方法检查存储在
curPin
中的jQuery对象是否包含当前元素:

var curPin;

$(".pin").click(function() {
    var $pin = $(this);
    if (curPin.is(this)) {
        console.log("true");
    } else {
        curPin = $pin;
        console.log("false");
    }
}

如果您的元素有一个id,您可以使用该id与类似的id进行比较-

var curPin;  

$('.pin').click(function(){   
  var $pin = $(this).attr('id');  
  if (curPin == $pin)
  {     
    console.log('true');   
  } 
  else 
  {     
    curPin = $pin;     
    console.log('false');   
  } 
} 

如果您的元素有一个id,您可以使用该id与类似的id进行比较-

var curPin;  

$('.pin').click(function(){   
  var $pin = $(this).attr('id');  
  if (curPin == $pin)
  {     
    console.log('true');   
  } 
  else 
  {     
    curPin = $pin;     
    console.log('false');   
  } 
} 

只需比较DOM元素:

if(curPin.get(0) == $pin.get(0)) {
    // do something
}

只需比较DOM元素:

if(curPin.get(0) == $pin.get(0)) {
    // do something
}

使用
if($(this).is(curPin))
检查元素是否相同。

使用
if($(this).is(curPin))
检查元素是否相同。

因为比较的是jQuery对象,而不是DOM元素。jQuery对象总是不同的(比如
{foo:42}==={foo:42}
是不同的),即使它们包含相同的DOM元素。是否还有其他类似于$pin的“unique ID”的属性可以进行相等性比较?是否值得从元素中比较一个属性,例如id?因为您正在比较jQuery对象,而不是DOM元素。jQuery对象总是不同的(比如
{foo:42}==={foo:42}
是不同的),即使它们包含相同的DOM元素。是否还有其他类似于$pin的“unique ID”的属性可以进行相等性比较?是否值得从元素中比较一个属性,例如id?如果元素没有id怎么办?@FelixKling,那么我会尖叫和大叫!:)。就这点而言,这只是一个选项。如果元素没有ID怎么办?@FelixKling,那么我会尖叫和大叫!:)。就这点而言,这只是一个选项。您可以只使用
if(curPin.is(this))
,它不会对OP的其他代码产生副作用,这些代码可能会将
curPin
用作jQueryobject@Esailija,非常正确,这样可以避免更改
curPin的类型。相应地更新了答案,感谢您的建议:)您可以只使用
if(curPin.is(this))
,它对OP的其他代码没有副作用,这些代码可以使用
curPin
作为jQueryobject@Esailija,非常正确,这样可以避免更改
curPin的类型。答案相应更新,感谢您的建议:)文档:文档: