如何使用jQuery检查DOM是否相等?

26

我正在构建一个简单的列表,其中一项被选择。我通过将“selected”类应用于我想要选择的任何项目来实现这一点。我有两个按钮,可以向前和向后遍历该列表。然而,当用户到达列表中的第一个或最后一个元素时,我想进行后续操作。这就是我卡住的地方,因为我很难识别当前选定的项目是否是第一个或最后一个。

简单示例:

<div id="list">
    <p>item 1</p>
    <p>item 2</p>
    <p class="selected">item 3</p>
</div>

假设用户按下“下一个”按钮,此时我正在检查类似于以下内容的内容:
if (jQuery('#list p.selected') == jQuery('#list p:last-child'))
    //do post back

然而,这个逻辑返回了 false,这让我觉得我可能走错了方向。
那么,使用 jQuery 检查这种逻辑的最佳方法是什么?

尝试搜索您的问题:https://dev59.com/dHE95IYBdhLWcg3wJKh_ - PetersenDidIt
我已经这样做了,而且我对比较特定的jQuery对象不感兴趣。我想要的是使用jQuery检查DOM的相等性。也许这是一样的,但我假设当您查询DOM时,jQuery对象会被实例化并分别处理。 - Joseph
jQuery对象只是DOM对象的数组,可以在它们上面执行更多的操作。 - PetersenDidIt
我理解这一点,但它们本身并不是DOM元素。除非我误解了框架,它们更像是围绕DOM元素的对象包装器。 - Joseph
2个回答

38

虽然你可以像Matt展示的那样比较jQuery对象,或者使用索引操作符简单地进行比较

if($("#list p.selected")[0] == $("#list p:last-child")[0])...

使用jQuery通常不需要这样做。有更好的方式

if($("#list p.selected").is(":last-child"))....
或者反过来,更易读
if($("#list p:last-child").is(".selected"))....

我其实做过这个,但我认为你的代码基本上是一样的:如果 ($('#list p:last-child').hasClass('selected'))... - Joseph

9

jQuery是一个对象,因此您在技术上比较的是两个不同但相似的对象,这将始终为false。

尝试:

if (jQuery('#list p.selected').get(0) == jQuery('#list p:last-child').get(0))

jQuery.get()


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接