jQuery -如何检查两个元素是否相同
jQuery - how to check if two elements are the same?
我需要将一个元素传递给一个函数,然后在遍历父元素时匹配该特定元素。问题(对于像我这样无知的人来说)是这个元素没有id。在下面的例子中,我希望所有元素都变成粉红色,除了被点击的元素应该变成黄色
function colorize(element) {
element.parent().find('span').each(function() {
if ($(this)===element) { // the problem is this is always false
$(this).css('background','yellow');
} else {
$(this).css('background','pink');
}
});
}
$('span').click(function() {
colorize($(this));
});
比较JQuery对象永远不会返回true,因为每个JQuery对象都是一个新对象,即使它们的选择器是相等的。
要比较元素,必须检查DOM元素是否相等:
this === element.get(0);
可以使用jQuery的is()
函数。原始答案可在此处找到。
function colorize(element) {
element.parent().find('span').each(function() {
if ( $(this).is(element) ) {
$(this).css('background','yellow');
} else {
$(this).css('background','pink');
}
});
}
使用isEqualNode
检查两个元素是否具有相同的标记
this.isEqualNode(element)
或者使用isSameNode
检查两个元素是否为相同的DOM节点
this.isSameNode(element)
你不必这么做。你总是在一个特定的元素上应用特殊的样式,所以把它们都涂上颜色,然后改变特定元素的颜色。
function colorize(element) {
element.parent().find('span').each(function() {
$(this).css('background','pink');
});
element.css('background','yellow');
}
你比较的问题是你比较两个对象(jQuery对象)。在比较对象时,除非它们指向相同的对象,否则它们被认为是不相等的:
var o1 = {};
var o2 = {};
o1 !== o2;
你可以通过移除jQuery包装器来解决这个问题:
function colorize(element) {
var realElement = element[0];
element.parent().find('span').each(function() {
if (this === realElement) {
$(this).css('background','yellow');
} else {
$(this).css('background','pink');
}
});
}
这样,您将比较DOM元素与DOM元素,而不是苹果与橘子或对象与对象。
相关文章:
- 两个指令创建新的继承的和隔离的作用域-元素得到哪个
- 如何在jQuery中包装两个元素的组
- JavaScript:当有两个B类元素时,如何在id X中的B类中选择A类
- 无法使以下ng on click outside指令在同一页面上的两个元素上工作
- Jquery:当两个或多个条件为true时,选择一个元素
- 如何按id查找两个类中任一类的子元素
- react-让一个元素返回两个相邻的<tr>标签
- 检查来自不同数组的两个元素的一个属性是否相等
- javascript函数包含两个元素和web音频api
- 如何比较两个字符串并删除jquery中的元素
- 将JQuery单击事件直接指向同一元素的两个
- 如何使用jQuery绕过具有指定类和两个条件的元素的函数
- 使用Javascript匹配两个HTML元素的高度
- 如何在两个动画画布元素之间进行通信
- 如何将日期和时间拆分为两个元素
- 检查最后两个元素
- 如何选择嵌套了两个 .each() 函数的多个元素
- 在两个元素的 onrender 事件之后执行函数
- 检查两个或多个 DOM 元素是否重叠
- 如何在同一个表中显示这两个嵌套ng重复的元素