如果,请避免在其他地方使用双重getElementId

时间:2014-11-15 07:10:31

标签: javascript

我有一长串else if陈述。

每个人都会document.getElementById检查是否存在某个元素。

在底部的else if语句之一中,我不仅需要getElementById,还需要检查该元素是否具有某个属性。这让我做getElementById两次,这是我希望避免的。

这是我的代码:

if (doc.getElementById('blah')) {

} else if (doc.getElementById('blah2')) {

} else if (doc.getElementById('js_blob') && doc.getElementById('js_blob').hasAttribute('action')) {
   //here
} else if (doc.getElementById('blah3')) {

} else if (doc.getElementById('blah4')) {

} else {
   console.warn('none of them');
}

请注意以下行:} else if (doc.getElementById('js_blob') && doc.getElementById('js_blob').hasAttribute('action')) {

我尝试了类似这样的东西并且它不起作用:} else if (var myBlobL = doc.getElementById('js_blob') && myBlobL.hasAttribute('action')) {这会产生语法错误

无论如何要避免在此getElementById语句中执行双else if

由于

2 个答案:

答案 0 :(得分:2)

使用临时变量:

var tmp;

// ...
} else if ((tmp = doc.getElementById('js_blob')) && tmp.hasAttribute('action')) {

答案 1 :(得分:1)

您可以将结果保存在变量中,在这种情况下,您只需调用一次getElementById

var js_blob = doc.getElementById('js_blob')

if (js_blob && js_blob.hasAttribute('action')) {
}

我看到你有很多的逻辑"否则如果",我认为你可以用这样的东西替换它

function fn() {
  var ids = ['elem1', 'elem2', 'elem3'],
      len = ids.length,
      i, el;

  for (i = 0; i < len; i++) {
    el = document.getElementById(ids[i]);

    if (el) {
      break;  
    }
  }

  if (!el) {
    return;
  }

  // work with el which has action 
  // or add logic for specific ID 

  if (el.hasAttribute('action')) {
    el.innerHTML = 'action';
  } else if (el.getAttribute('id') === 'elem2') {
    el.innerHTML = 'ELEM2';
  }
}

fn();

需要减少对DOM的计数吸引力,在这种情况下,您只需要一次吸引每个元素,并且只能用于复制。