我有一长串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
?
由于
答案 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的计数吸引力,在这种情况下,您只需要一次吸引每个元素,并且只能用于复制。