我想知道是否有更好的方法可以做到这一点:
我正在尝试将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。
谢谢!
答案 0 :(得分:1)
你可以这样做:
target = ( el.querySelectorAll("[data-update]").length>0 &&
el.querySelectorAll("[data-update]") ) ||
( el.querySelectorAll("div.ui-content").length> 0 &&
el.querySelectorAll("div.ui-content") );
但它绝对不可读,而且DOM调用太多。但“一线”。 小提琴:http://jsfiddle.net/3X2Nd/
答案 1 :(得分:1)
使用条件运算符,并检查选择的长度:
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中,零被视为false。并且非零数字被视为真实。