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)
我不知道为什么你不需要“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 数组。