2013-01-10 141 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]); 
    } 
}