【问题标题】:What's the correct way to check return value from `querySelectorAll`?从`querySelectorAll`检查返回值的正确方法是什么?
【发布时间】:2015-09-18 02:59:34
【问题描述】:

使用querySelectorAll时,检查它是否返回任何元素的正确方法是什么?

它返回无法检查 false 的内容。这似乎不起作用:

var elements = document.querySelectorAll('.class');
if (elements) {
  // doesn't work, `elements` is always true
}

现在我正在通过.length 属性进行以下检查:

var elements = document.querySelectorAll('.class');
if (elements.length) {
  // querySelectorAll returned DOM elements
}

你是这样做的吗?

【问题讨论】:

    标签: javascript dom document selectors-api


    【解决方案1】:

    没错。

    document.querySelectorAll('.class') 返回一个非实时的Node List,这将永远是真实的

    因此您需要通过length来统计列表中的项目,以确定是否有超过0个项目。

    【讨论】:

    • @JamesThorpe 谢谢,更新了我的答案.. 和知识!
    • 没问题 - 请注意它是非实时的,即它的元素不会更新。在某些情况下,您有该页面上记录的活体
    【解决方案2】:

    是的。 querySelectorAll 将返回一个array-like object,它有一个长度属性(实际对象是一个NodeList)。

    所以,

    if(elements.length > 0) {
      // you have elements
    }
    
    // and
    
    if(element.length === 0) {
      // you don't have elements
    }
    

    if(elements) 的问题在于 [] 是真的,这意味着它总是会返回真:

    !![] === true.

    【讨论】:

      猜你喜欢
      • 2012-04-05
      • 2020-02-23
      相关资源
      最近更新 更多