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

不,你不能。

document.getElementById('fb0'),正如函数名已经说过的那样,返回html elementid 等于 的fb0。之后,您正在访问属性onclick。但如果获取失败,它将破坏脚本。

在第一个场景中,您测试分配是否有效,如果它是否意味着元素存在并且只有在它存在时才会执行。

这些是不同的行为。

于 2011-06-09T20:56:50.647 回答
1

并不真地; 如果getElementById('fb0')不返回任何内容,则您的页面会出错,而在第一种情况下不会。

于 2011-06-09T20:48:19.597 回答
1

要检查“document.getElementById('fb0')”是否返回元素或 null,第二个版本不这样做,如果没有 id 为“fb0”的元素将抛出错误。如果您在某些时候不从 DOM 中删除“fb0”元素,则第二个版本是可以的。

于 2011-06-09T20:49:52.957 回答
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 回答
0

document.getElementById('fb0')如果不存在,那将失败。document.getElementById('fb0').onclick在那种情况下意义不大。

于 2011-06-09T20:48:13.477 回答