【问题标题】:Test if two elements are the same测试两个元素是否相同
【发布时间】:2010-11-19 04:30:30
【问题描述】:

一开始我会怀疑这是可行的:

if ($('#element') == $('#element')) alert('hello');

但事实并非如此。如何测试元素是否相同?

【问题讨论】:

    标签: javascript jquery


    【解决方案1】:

    从 jquery 1.6 开始,您现在可以简单地执行以下操作:

    $element1.is($element2)
    

    【讨论】:

    • 这是所有最新版本的 Jquery 的最佳答案。
    • 另一个我希望每次我在谷歌上搜索同一个问题并找到这个答案时都能投票赞成
    【解决方案2】:

    这应该可行:

    if ($(this)[0] === $(this)[0]) alert('hello');
    

    应该这样

    if (openActivity[0] == $(this)[0]) alert('hello');
    

    【讨论】:

    • 您的第二个示例不应该是 === 而不是 ==,以正确反映您的第一个示例吗?
    • 这个答案在旧版本的jquery中可能是正确的,但大多数人使用的可能是支持$.is的版本
    【解决方案3】:

    或者只是

    if (openActivity[0] == this) alert('hello');
    

    (没有新的 jQuery 实例 ;-)

    【讨论】:

      【解决方案4】:

      正如有人已经说过的,包裹在两个不同时刻的同一个 HTML 元素会生成两个不同的 jQuery 实例,因此它们永远不可能相等。

      相反,包装的 HTML 元素可以这样比较,因为如果是同一个 HTML 元素,它们占用的内存位置是相同的,所以:

      var LIs = $('#myUL LI');
      var $match = $('#myUL').find('LI:first');
      
      alert(LIs.eq(0) === $match); // false
      alert(LIs.get(0) === $match.get(0)) // TRUE! yeah :)
      

      最好的问候!

      【讨论】:

        【解决方案5】:

        我会使用 addClass() 来标记打开的,你可以很容易地检查。

        【讨论】:

          【解决方案6】:

          9 年后,没有 jQuery

          如果两个元素相同,则两个元素必须具有相同的指针。 因此,

          document.body === document.body // true
          document.querySelector('div') === document.querySelector('div') // true
          document.createElement('div') === document.createElement('div') // false
          

          【讨论】:

            【解决方案7】:

            就像 Silky 或 Santi 所说,唯一的 ID 或类将是最简单的测试方法。您的 if 语句不像您期望的那样工作的原因是因为它正在比较 2 个对象并查看它们是否是内存中的同一个对象。

            因为 $(this) 总是创建一个新对象,所以它们永远不会相等。这就是为什么您必须测试对象的属性。如果每个 openActivity 元素都保证具有可以测试的不同内容,那么您就可以摆脱唯一的 id/class。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2012-09-11
              • 1970-01-01
              • 2016-02-26
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多