1

これを行うためのより良い方法があるかどうか疑問に思っています:

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 のみ。

ありがとう!

4

2 に答える 2

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/

于 2013-12-05T13:40:45.503 に答える
1

条件演算子を使用して、選択範囲の長さを確認します。

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

基本的にa ? b : c、 a が true の場合は b を受け取り、そうでない場合は c を受け取ります。詳細:条件付き演算子

また、最初の選択を繰り返したくない場合は、次の手順を追加できます。

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

この構文を最初に見たときは、本当に奇妙です。でも、すぐに慣れます。

注: JavaScript では、ゼロは false として扱われます。また、ゼロ以外の数値は true として扱われます。

于 2013-12-05T13:58:08.553 に答える