1

減らすことはできますか

function n()
  {
  var a; 
  if(a = document.getElementById('fb0')) 
    {
    a.onclick = i0;
    document.getElementById('fb1').onclick = i1;
    }
  }

function n()
  {
  if(document.getElementById('fb0').onclick = i0) 
    {
    document.getElementById('fb1').onclick = i1;
    }
  }

現在、デバッガーを持っていません。最初のスニペットは正常に機能するため、値が返されることはわかっていdocument.getElementById('fb0')ます。しかし、ifステートメントで割り当てを評価する必要がありますか?

4

5 に答える 5

1

あまり; getElementById('fb0')何も返されない場合、ページはエラーになりますが、最初の場合はエラーになりません。

于 2011-06-09T20:48:19.597 に答える
1

「document.getElementById('fb0')」が要素またはnullを返すかどうかを確認するために、2番目のバージョンはそれを行わず、IDが「fb0」の要素がない場合はエラーがスローされます。ある時点でDOMから「fb0」要素を削除しなくても、2番目のバージョンは問題ありません。

于 2011-06-09T20:49:52.957 に答える
1

いいえ、できません。

document.getElementById('fb0')、関数名がすでに述べているようにhtml element、idが。に等しいwithを返しますfb0。その後、属性にアクセスしますonclick。しかし、getが失敗すると、スクリプトが壊れます。

最初のシナリオでは、割り当てが機能するかどうかをテストします。機能する場合は、要素が存在することを意味し、存在する場合にのみ実行されます。

それらは異なる振る舞いです。

于 2011-06-09T20:56:50.647 に答える
0

存在しなければ失敗するでしょうdocument.getElementById('fb0')document.getElementById('fb0').onclickその場合はあまり意味がありません。

于 2011-06-09T20:48:13.477 に答える
0

IDによるDOM選択を多く行う場合は、そのメソッドの短縮バージョンを作成します。

function byId( id ) { return document.getElementById(id); };

function n() {
  var a; 
  if(a = byId('fb0')) {
    a.onclick = i0;
    byId('fb1').onclick = i1;
  }
}

この場合、条件内で割り当てを行っても文字は保存されません。宣言でそれを行うのと同じ長さです。

function byId( id ) { return document.getElementById(id); };

function n() {
  var a = byId('fb0'); 
  if(a) {
    a.onclick = i0;
    byId('fb1').onclick = i1;
  }
}
于 2011-06-09T20:56:31.097 に答える