2016-02-01 33 views
1

我有一个外部JavaScript旨在替换我网站上的某些字词。为了保持高效,每个页面都会加载相同的外部脚本,因此如果需要进行任何更改,我可以简单地编辑单个文件。这是我使用的代码示例:如何允许document.getElementById找不到ID?

document.getElementById("ey").innerHTML = 'AY' 
document.getElementById("ny").innerHTML = 'BY' 
document.getElementById("gy").innerHTML = 'CY' 

然而,我发现,如果一个页面包含一个元素(比如,“GY”),但不是另一个(“NY”),那么,脚本无法正确执行。我有一长串这些变化(50ish),所以我很想让它工作。

任何想法如何让代码提供没有找到特定ID的津贴?

+0

不设置属性或东西,可能不存在通话功能。检查它们是否存在,如果它们存在则调用,如果不存在则跳过。否则,你的脚本会做一些违法的事情,并且它的运行会被终止,不管坏线是多么完美的代码。 –

+0

@LilligantEX页面上需要更改的元素有哪些不同类型? – pratikpawar

回答

2
setInnerHTML('ey', 'AY'); 
setInnerHTML('ny', 'BY'); 

...etc etc 

function setInnerHTML(elementId, innerHTML) { 
    var el = document.getElementById(elementId); 

    if (el) { 
     el.innerHTML = innerHTML; 
    } 
} 
+0

太好了。谢谢! – StarDart

2

很好,你可以写类似

var el = document.getElementById("MY-ID") 
if (el) 
    el.innerHTML = 'MY VALUE' 

一个很好的解决方案是一种方法来包装这个,像这样:

function setValue(id, value){ 
    var el = document.getElementById(id) 
    if (el) 
    el.innerHTML = value 
} 

然后调用它像:

setValue('ey', 'AY') 
setValue('ny', 'BY') 

等等

+0

也是一个很好的答案。谢谢! – StarDart

2

你总是可以为此做一个小结构。

(function(){ 
    var defaultChanges = { 
     'ey' : 'AY', 
     'ny': 'BY', 
     'gy' : 'CY' 
    }; 
    for(var id in defaultChanges){ 
     var el = document.querySelector("#"+id); 
     if(el) el.innerHTML = defaultChanges[id]; 
    } 
})() 

通过这种方式,您所需要做的就是更改您的对象,并且整个集合将在页面中更改。

+0

我比我的回答更喜欢这个;) –

0

如果没有找到,使用一个虚拟对象:

(document.getElementById("ey") || {innerHTML:''}).innerHTML = 'AY' 
(document.getElementById("ny") || {innerHTML:''}).innerHTML = 'BY' 
(document.getElementById("gy") || {innerHTML:''}).innerHTML = 'CY' 
相关问题