11

DOM要素がjavascriptに存在するかどうかを確認するためのベストプラクティスは何ですか?

そのように、アイテムを使用する前に、アイテムが存在するかどうかを確認する必要がありますか?

if ($("#" + machineId + packageId.removeSpecialChars().toUpperCase() + "").size() != 0) {
  var row = $("#" + machineId + packageId.removeSpecialChars().toUpperCase() + "");
}

packageId.removeSpecialChars().toUpperCase()これは2回実行されませんか?

または、これはより良いオプションでしょうか?

var row = $("#" + machineId + packageId.removeSpecialChars().toUpperCase() + ""); 
if (row)
{
  // do something
}

ただし、見つからない場合は例外をスローしませんか?

4

5 に答える 5

21

実際にDOM要素を操作している場合は、JavaScriptエラーを回避するために、DOM要素を操作する前にそれが存在することを確認する必要があります。ただし、DOM要素を操作しているのではなく、(潜在的に)DOM要素を含むjQueryオブジェクトを操作しています。

jQuery関数は、要素のセットに一致するものがない場合をすでに処理しているため、要素を操作する前に、要素があることを明示的に確認する必要はありません。.get()関数または[index]角括弧表記を使用して、そのセット内からDOM要素を直接参照しようとしている場合にのみ、これを行う必要があります。

余談ですが、.size()jQuery関数はバージョン1.8で非推奨になりましたlength。要素があるかどうかを確認するには、jQueryオブジェクトのプロパティを直接使用する必要があります。

var $object = $('a-selector');
if($object.length) {
    // there's at least one matching element
}
于 2013-03-05T11:51:15.020 に答える
1

一般的なプログラミング規約では、繰り返さないでください。したがって、この場合、少なくとも1回だけ物事の検索を実行し、変数参照を保持することができます。

var thing = $("#" + machineId + packageId.removeSpecialChars().toUpperCase() + "");

thing次に、選択ルックアップが2回発生せず、冗長なメソッド呼び出しが削除されます。これには、変数に、、または、eeek以外の意味のある名前を付けることができる場合に、よりわかりやすいコードを記述できるという利点もあります。、a(必ずしもコードがより意味のあるものでなければならないわけではありませんが、人々はまだ!のような名前を使用していますa

if (thing != null) { }
if (thing.size() != 0) {

} 
etc.

メソッドを複数回呼び出すことに関しては、それはしばしば避けられません。

于 2013-03-05T11:44:56.330 に答える
1

キャッシュする方が良い:

var machId = $("#" + machineId + packageId.removeSpecialChars().toUpperCase());
if (machId.size() != 0) {
   var row = machId;
}
于 2013-03-05T11:47:31.190 に答える
0

必要なのは次のとおりです。

var a = $("#" + machineId + packageId.removeSpecialChars().toUpperCase() + "");
if (a.size()) {
    var row = a;
}
于 2013-03-05T11:45:03.083 に答える
0

基本的には、HTML に DOM 要素が存在するかどうかを確認する必要がありますが、要素が DOM に存在しない場合でも jQuery は致命的なエラーをスローしないことに注意してください。バージョン 1.8 から廃止された .size() と呼ばれるものがあったため、古いバージョンの jQuery を使用していても使用することはお勧めしません。現時点での最善の解決策は、次のコードのようなものです。

if($('.class').length) { // check if any element with this class exist, if not exist, it return 0 and can not pass the if estatement
    // do something
}
于 2017-02-05T11:47:11.367 に答える