javascript - 如何根据 JavaScript 中哪个 nodeList 不为空来设置变量?

标签 javascript operators nodelist selectors-api

我想知道是否有更好的方法来做到这一点:

我正在尝试将 target 设置为 [data-update]"div.ui-content 以在其中找到一个元素。

本来我想做这样的事情:

target = el.querySelectorAll("[data-update]") || el.querySelectorAll("div.ui-content");

但这行不通,因为第一个表达式总是会被定义,即使它是一个空的 nodeList []

所以现在我有了这个,它可以工作,但我对它不满意:

target = container.querySelectorAll("[data-update]")

if (target.length === 0) {
  target = container.querySelectorAll("div.ui-content");
}

if (target.length === 0) {
  util.errorHandler({"error": "updatePageSection: No target found"});
} else {
  // do stuff
}

问题:
有没有更简单的方法来做到这一点?仅限纯 JavaScript。

谢谢!

最佳答案

使用条件运算符,并检查选择的长度:

target = el.querySelectorAll("[data-update]").length
     ? el.querySelectorAll("[data-update]")
     : el.querySelectorAll("div.ui-content");

基本上 a ? b : c 表示如果a为真,取b,否则取c。更多信息:Contional operator .

此外,如果你不想重复第一次选择,你可以添加一个额外的步骤:

target = el.querySelectorAll("[data-update]");
target = target.length ? target : el.querySelectorAll("div.ui-content");

你第一次看到这个语法真的很奇怪。但您很快就会习惯的。

注意:在 JavaScript 中,零被视为假。并且非零数字被视为 true。

关于javascript - 如何根据 JavaScript 中哪个 nodeList 不为空来设置变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20401368/

相关文章:

javascript - 古吉拉特语未显示

Javascript:event.which 和 charCodeAt 协同工作

javascript - Jquery中的事件需要多次点击

c++ - 不等于运算符需要澄清

java - 未使用 NodeList 获取 XML 标记值

python - 从 CSV 文件中提取列以用作 NetworkX 中的节点列表

javascript - ui-select 无结果事件

arrays - 为什么元胞数组中的尾随逗号是有效的 Matlab 语法?

PHP别名@函数

javascript - 'live'元素的解释