Я использую селектор для получения группы объектов (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.
Я не знаю, почему вам не нужны значения 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 по идентификатору элемента.
Вы не можете сделать сравнение на обертке jQuery, но можете сделать его на базовом DOM-узле. Потеряв несколько долларов, вы в порядке:
.focus(function(){
var that= this;
$openMenus.each(function(){
if (this!==that){
[do something]
}
});
})
(или используйте, например, обёртку[0]
, чтобы получить DOM узел из одноэлементной jQuery обёртки.)
(Я использовал ===
для сравнения, потому что обычно это лучше всего, но в данном случае это тоже сработает с ==
.)
Следуя указаниям 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');
}
}