比较jQuery对象

DA.*_*DA. 6 comparison jquery object

我正在使用选择器来获取一组对象(0或更多):

var $openMenus = $Triggers.filter(".trigger-hover");
Run Code Online (Sandbox Code Playgroud)

然后我有一个事件附加到上面的对象中可能或可能不在的项目.在那个我希望将触发事件的项目与c进行比较的事件中

$([selector])
    .focus(function(){
        var $thisMenu = $(this);
        $openMenus.each(function(){
            if ($(this) != $thisMenu ){ 
                [do something]
            }
        }) 
    })
Run Code Online (Sandbox Code Playgroud)

这不行.虽然多个jQuery对象可能会引用相同的DOM对象,但它们实际上是单独的jQuery对象,并且永远不会比较真实.

鉴于此,处理这个问题的方法是什么?如何有两个jQuery对象并比较它们以查看一个jQuery对象是否引用与另一个相同的DOM元素?

我可以给每个项目,我正在尝试选择一个ID,但我想知道是否有其他方法可以解决它,而无需添加更多的HTML.

Cra*_*aig 10

继bobince之后,使用正确的get(0)方法返回存储在jQuery对象中的第一个元素,而不是使用wrapper [0].

var focused = null;  
$(':input').focus( function() {  
   focused = $(this);  
   compare($(this)); 
   //Compare them...trivial but will return true despite being different jQuery objects.
}).blur( function() {           
   focused = null; 
});

function compare(element) {
   if (element.get(0) == focused.get(0)) {
      alert('The same');
   }
}
Run Code Online (Sandbox Code Playgroud)


Poi*_*nty 1

我不知道为什么你不需要“id”值,但你总是可以制作一个小 jQuery 插件来为元素提供唯一的“id”值(如果它们缺少原始 HTML 中的值)。

jQuery.fn.setId = (function setupSetId() {
  var counter = 0; // or maybe new Date().getTime()
  return function setId() {
    return this.each(function setIdInternal() {
      var $self = jQuery(this);
      if (!$self.attr('id')) $self.attr('id', '_' + counter++);
    });
  };
})();
Run Code Online (Sandbox Code Playgroud)

然后您可以编写另一个实用程序来按元素 id 比较 jQuery 数组。