【问题标题】:Worth checking if an element exists first?值得先检查一个元素是否存在?
【发布时间】:2011-07-05 01:54:45
【问题描述】:

context:我正在建立一个收藏夹 使用 html 本地存储的系统 API(带有 php 会话回退)。如果收藏的项目在 页面,用js添加类'favourite'...

如果我不知道元素 id 是否会出现在页面上。是先检查它是否存在更好,还是 jQuery 返回 false 一样有效?

【问题讨论】:

  • 您如何检查“页面上是否有收藏的项目”?

标签: javascript jquery html local-storage


【解决方案1】:

有类似情况的测试代码on jsperf

if ($('#item_123').length === 1) {
 $('#item_123').remove();
}

VS

 $('#item_123').remove(); //this turned out slower for me in chrome 13

【讨论】:

  • 嗯,在 Chrome 12 中对我来说速度更快。另外,here's the revision with correct tags
  • 在您的测试中,没有匹配的元素,因此第一个示例中的$('#item_123').remove();从不运行。因此,您所做的只是将$('#item_123').length === 1$('#item_123').remove(); 进行比较。所以是的,访问.length 属性可能比调用.remove() 方法执行得更好。
  • 感谢您将我送到 jsperf 的方向
【解决方案2】:

不管怎样,你总是会执行$()。所以保留一个引用该方法结果的变量,通过检查它是否存在,效率不会有任何损失(或可以忽略不计的损失)。

【讨论】:

    【解决方案3】:

    很可能不是。如果 jQuery 没有找到匹配项,它将没有可枚举的内容,只会继续前进。换句话说,这样的事情是不必要的:

    var $favorite = $("#favorite");
    if ($favorite.length) {         // Test whether it exists
      $favorite.doSomething();
    }
    

    最好写成:

    $("#favorite").doSomething();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-20
      相关资源
      最近更新 更多