сравнение объектов jQuery

Я использую селектор для получения группы объектов (0 или больше):

var $openMenus = $Triggers.filter(".trigger-hover");

Затем мне присоединили событие к объекту, который может или не может быть в объекте выше. В том событии, где я хочу сравнить объект, который инициировал событие к c

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

Это не будет работать. В то время как несколько объектов jQuery могут ОТНОСИТЬСЯ к тому же Объекту DOM, они - на самом деле отдельные объекты jQuery, и там для никогда не будет выдерживать сравнение верный.

Учитывая, что, каков был бы способ обработать это? Как каждый имеет два объекта jQuery и сравнивает их, чтобы видеть, обращается ли один объект jQuery к тому же элементу DOM как другой?

Я мог дать каждый объект, я пытаюсь выбрать идентификатор, но задаюсь вопросом, существует ли другой способ пойти об этом, не имея необходимость добавлять больше к HTML.

6
задан hippietrail 17 October 2012 в 09:41
поделиться

3 ответа

Я не знаю, почему вам не нужны значения 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++);
    });
  };
})();

Затем вы можете написать другую утилиту для сравнения массивов jQuery по идентификатору элемента.

1
ответ дан 8 December 2019 в 16:02
поделиться

Вы не можете сделать сравнение на обертке jQuery, но можете сделать его на базовом DOM-узле. Потеряв несколько долларов, вы в порядке:

.focus(function(){
    var that= this;
    $openMenus.each(function(){
        if (this!==that){ 
            [do something]
        }
    });
})

(или используйте, например, обёртку[0], чтобы получить DOM узел из одноэлементной jQuery обёртки.)

(Я использовал === для сравнения, потому что обычно это лучше всего, но в данном случае это тоже сработает с ==.)

.
3
ответ дан 8 December 2019 в 16:02
поделиться

Следуя указаниям bobince, вместо использования оболочки [0] используйте правильный метод get (0) для возврата первого элемента, хранящегося в вашем объекте jQuery.

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');
   }
}
10
ответ дан 8 December 2019 в 16:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: