如何检查2个jQuery选择器是否指向相同的元素
How do I check if 2 jQuery selectors are pointing to the same element(s)?
如果我尝试这样的东西:
$(".foo") === $(".foo") // = false
我错了。如果我尝试这个查询,
$(".foo").get(0) === $(".foo").get(0) // = true
我明白了。
这是因为:
{a:myObject} !== {a:myObject};
[myObject] !== [myObject];
myObject === myObject;
我想知道是否有任何简洁的方法来测试这种相等性,最好是内置在jQuery中。我编写的第二种方法只有在最多有一个元素与.foo
匹配的情况下才能正确工作。该解决方案应该适用于任何数量的元素。
显然,我不想只检查".foo" === ".foo"
,因为我使用的实际选择更复杂。我只是为这个例子简化了它们。(例如,我可能想检查$(this)
是否选择了与$(".foo")
相同的内容。)
我想您正在寻找$().is
。此处提供文档。
var foo, bar;
foo = $('foo');
bar = $('.bar');
// This will check to see foo and bar contain the same elements
foo.is(bar); // true | false
编辑:@lolwut为这个答案提供了一个jsfiddle。在阅读了评论之后,我更新了它,并确定这个答案对于OP的情况来说是不可靠的。
核心库中没有任何东西可以检查jQuery对象的序列相等性,但以下内容应该可以做到:
$.fn.sequenceEqual = function(compareTo) {
if (!compareTo || !compareTo.length || this.length !== compareTo.length) {
return false;
}
for (var i = 0, length = this.length; i < length; i++) {
if (this[i] !== compareTo[i]) {
return false;
}
}
return true;
}
哪个可以这样使用:
$(".foo").sequenceEqual($(".bar"))
为了完整性,一个内容相等的方法可以这样写:
$.fn.contentsEqual = function(compareTo) {
return compareTo && this.length === compareTo.length && this.length === this.filter(compareTo).length;
}
哪个可以这样使用:
$(".foo").contentsEqual($(".bar"))
如果您想检查两个集合是否完全包含相同的元素(可能顺序不同),那么Array#every
和$.fn.index
可以完成以下任务:
var $this = $("p"),
$other = $("p");
// same length and $other contains each element of $this
var equal = $this.length === $other.length
&& Array.prototype.every.call($this, function(elem) {
return $other.index(elem) > -1;
});
作为pimvdb答案的替代方案(这很好,我只是为了完整性而提供),您可以利用add()不会添加jQuery对象中已经存在的元素这一事实。因此,你可以写:
$.fn.containsSameElements = function(other) {
var len = this.length;
return other.length == len && this.add(other).length == len;
};
好的,只使用jquery内置,这似乎是正确的
$(oneSelector).filter($(anotherSelector)).length == 1
if($(oneSelector).is($(anotherSelector))……它们相等
相关文章:
- 是否有任何snippet或jQuery插件可以列出easylist.txt模式匹配的DOM中的所有元素
- 是否有一个JS/jQuery函数可以获取某个类的每个元素的ID
- 用于检查数组中是否存在元素的javascript自定义方法
- 如何检查元素的内容是否为空,如果为空,请在jquery中删除该元素
- 如何知道元素在屏幕上是否可见.如果没有,请滚动页面
- 是否有任何可能的原因使我应该指定类型=“”;按钮“;用于我的按钮元素
- javascript数组元素是否知道其封闭数组
- 是否同步加载了LINK元素
- 如何查明鼠标按下事件是否发生在滚动条上或元素中的其他任何位置
- 如何检查元素是否在iframe中
- 使用js/jQuery检查对象(而不是元素)是否真的存在
- 浏览器是否持久缓存脚本元素的编译版本
- 检查元素是否将状态从隐藏更改为可见
- CSS3:当页面向下滚动到第一个视口时,是否可以在元素上触发转换
- 是否可以在第n个元素处重复启动ng
- 如果侦听器附加到父元素,是否可以区分单击发生在哪个子元素上
- 我如何为列出的选项卡元素编写一个Protractor测试,它会检查它是否's是否处于活动状态
- 是否可以在尚未附加到DOM的元素中创建一个sparkline(使用jquery.sparkline插件)
- 是否可以使用flexbox显示模型设置元素的滚动位置
- 确定元素是否存在