2014-01-17 37 views
0

我想爲一堆html頁面使用相同的.js,但不一定是每個頁面中的.js的所有ID。現在,如果我不使用一個ID,沒有ID顯示。javascript:不必使用html文件中的所有ID?

var yes = 'Yes'; 
var no = 'No'; 
var available = 'Available: '; 

document.getElementById("001").innerHTML=available+yes; 
document.getElementById("002").innerHTML=available+no; 
document.getElementById("003").innerHTML=available+yes; 

有這方面的一個HTML工作正常:

<div id="001"></div> 
<div id="002"></div> 
<div id="003"></div> 

跟這個有HTML,沒有那麼精細:

<div id="002"></div> 
<div id="003"></div> 

怎樣做才能使之運行,即使有些ID的阿爾恩」正在使用?

完成noob這個,有可能是一個超級簡單的解決方案(?) - 但我找不到它。希望這裏有人能夠幫助我 - 沒有完全抨擊我,或者告訴我這是多麼糟糕的實踐,並且我應該用一些我甚至沒有聽說過的大型哈克語言來重寫它:D

謝謝提前!

回答

0

如果找不到匹配的元素,則document.getElementById()函數返回nullnull.innerHTML是停止當前腳本執行的錯誤。所以,你只需要測試null

var el = document.getElementById("001"); 
if (el != null) el.innerHTML = available + yes; 

null測試可以簡化爲:

if (el) el.innerHTML = available + yes; 

如果元素 「001」 是總是將是 「是」, 「002」總是將是「無」,等等,那麼你可以這樣做:(!的document.getElementById(「ID」)== NULL)

var results = {"001" : yes, "002" : no, "003" : yes}; 
var el, k; 
for (k in results) { 
    el = document.getElementById(k); 
    if (el) el.innerHTML = available + results[k]; 
} 
+0

這似乎是訣竅,需要最少量的「重新編碼」。我對一件事感到好奇;我怎樣才能使用相同的變量來定義所有這些不同的ID(在你的例子中的「el」)?這是不是總體上可能適用於js的東西......這對我來說只是一個簡單的計數器。附:也非常感謝你的這種教育社會反應。 – user3204755

+0

_'the「el」in your example'_ - Variables可以隨時重新分配值,因此您可以使用單個'el'變量來處理所有html元素。但我懷疑你打算詢問'result'變量,它是一個從對象文字創建的對象。有關更多信息,請閱讀MDN文章[使用對象](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Working_with_Objects)(請參閱「創建新對象」一節在我的答案中使用的對象字面值語法)。 – nnnnnn

+0

不,不,我去了你的第一個解決方案:)我要問關於「el」。完美工作!對我來說,我似乎很奇怪,我對一個變量有不同的值: var el = document.getElementById(「001」); var el = document.getElementById(「002」); var el = document.getElementById(「003」); 等。但是,然後再次,我是菜鳥:D – user3204755

0

與包裹是否是?

0

只是包裝了整個事情的try聲明,以避免任何問題,將代碼之後進入finally聲明::

try{ 
document.getElementById("001").innerHTML=available+yes; 
document.getElementById("002").innerHTML=available+no; 
document.getElementById("003").innerHTML=available+yes; 
//etc 
} 
finally{ 
    //any other code that there is after the id stuff 
} 

這樣就能避免錯誤,所以如果事情失敗,它仍將繼續

+0

這也將阻止塊中的其他代碼運行,一旦你遇到錯誤。, –

+0

好的,我會編輯計算的那個 – Markasoftware

+0

嗯......我真的覺得你需要包裹每一個在單獨的'try/catch'中。當你到達「終點」時,你仍然不知道你離開的地方。例如,如果「002」拋出,你怎麼知道你需要繼續使用'「003」'。 –

1

雖然我會問你爲什麼需要像這樣遞增數字ID,但一種解決方案只是將ID映射保留爲值,然後迭代地圖檢查null

var m = { 
    "001":yes, 
    "002":no, 
    "003":yes 
}; 

for (var p in m) { 
    var el = document.getElementById(p); 
    if (el) // or if (el !== null) 
     el.innerHTML = available + m[p]; 
} 
+0

是的,這可能是正確的做法 – Markasoftware

相關問題