2013-01-10 45 views
0

可能重複:
How to catch exceptions in javascript?捕獲異常在JavaScript

我改變舊的Web應用程序。不幸的是一些佈局變化是生成組件,我沒有找到任何合理的解決方案,所以我被迫使用'JavaScript黑客'。我的模板在加載頁面加載JavaScript文件'layoutfixes.js'結束時改變了一些生成的組件。產生commponents有不同的身份證件或者不哈他們所有,所以有時我不得不在一個糟糕的方式,以獲得元素,像這樣:

var tdNodes = document.getElementById('tabbedPanel').childNodes[1].childNodes[0]. ... .childNodes[0]; 

但正如我不是說每一個頁面都有那些組件,因此線如上投該元素爲空的錯誤。我不會在任何地方添加檢查頁面上是否存在這樣的元素。我會在該javascript中添加諸如「try {} catch(Exception e){}」之類的東西。但我不熟悉JavaScript足夠。在JavaScript中是這樣的?

+2

請自行研究一下。一個簡單的谷歌搜索「JavaScript嘗試趕上」將指出你在正確的方向。 – Lukas

回答

1

黑客是正確的詞,你在那裏做什麼。正如你已經進入兩輪牛車的世界裏,你還不如用一個try/catch再添:

try { 
    document.getElementById('tabbedPanel').childNodes[1] 
} 
catch (ex) { 
// do nothing 
} 

此處瞭解詳情:http://www.w3schools.com/js/js_errors.asp

1

的JavaScript確實有try/catch實現:

try { 
    // add code that can throw exceptions 
} 
catch (e) { 
    // statements to handle any exceptions 
} 
1

您可以嘗試使用Cache作爲其他答案建議,但我認爲你要遍歷一個特定節點的孩子。在這種情況下,下面的代碼可以解決問題:

var tdNodes = document.getElementById('tabbedPanel');

for (var i = 0; i < tdNodes.length; i++) { 
    //do something with childNodes[i] 
} 

如果你想瀏覽整個DOM(文檔對象模型),你可以使用這樣的遞歸調用:

VAR tdNodes =的document.getElementById( 'tabbedPanel');

function doSomethingWithNode(node) { 
    //process the node and do whatever you like 

    //process all the children with a recursive call 
    for (var i = 0; i < tdNodes.length; i++) { 
    doSomethingWithNode(childNodes[i]); 
    } 
}