【问题标题】:How can I test if two jQuery wrapped DOM elements are the same? [duplicate]如何测试两个 jQuery 包装的 DOM 元素是否相同? [复制]
【发布时间】:2010-03-05 20:44:56
【问题描述】:

我正在用 jQuery 编写一个可排序的列表实现(臭名昭著的 scroll-in-div 问题的 b/c,有什么新的解决方案吗?)。但是,我不知道如何比较元素(在 mousedown/mouseup 上触发)在它们被包裹在 jQuery 中之后。在原型中,它始终是 ele.domNode。

这就是我想要完成的本质......

<div id="cheese"></div>
<div id="burger"></div>

<script>

// Some dom nodes wrapped in jquery
var ele1 = $('#cheese');
var ele2 = $('#burger');
var ele3 = $('#burger');

// Is the dom node wrapped in ele1 (#cheese) the same as in ele2 (#burger)?
if (ele1 == ele2)
{
    // Should never be true
}

// Is the dom node wrapped in ele2 (#burger) the same as in el32 (#burger)?
if (ele2 == ele3)
{
    // Should always be true
}

</script>

【问题讨论】:

  • e-motiv 的回答很好,在这个问题上没有提到:stackoverflow.com/questions/2407825/…
  • 2010 的这个问题是 2013 的一个问题的重复?嗯,一定是什么奇怪的量子光锥,我看不懂。

标签: javascript jquery dom


【解决方案1】:

可以将 jQuery 对象视为原始 DOM 元素的数组。

您可以像这样比较原始 DOM 元素:

if(ele2[0] === ele3[0])

【讨论】:

  • 这行得通,似乎是首选方法,谢谢:s
【解决方案2】:

像这样比较里面的DOM元素:

if (ele1.get(0) == ele2.get(0))

【讨论】:

  • 这个方法也可以,谢谢!
【解决方案3】:

这也是解决这个问题的一种可能方法。您可以比较 id 属性,因为它们在上面的示例中应该完全相同。

ele1.attr("id") == ele2.attr("id"); //returns false
ele2.attr("id") == ele3.attr("id"); //returns true

【讨论】:

  • id 的比较没有任何收获,而且调用attr 肯定比仅仅索引jQuery 对象要慢。
  • 感谢您的洞察力。我只是想我会分享一个与其他解决方案相比也无需考虑性能的解决方案,因为 OP 没有说他正在寻找最快的解决方案。
  • 如果元素没有id就不行了..
猜你喜欢
  • 2010-11-19
  • 2012-09-11
  • 1970-01-01
  • 2012-06-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-26
相关资源
最近更新 更多