我正在更改旧的Web应用程序。不幸的是,一些布局更改生成的组件我没有找到任何合理的解决方案,所以我被迫使用'javascript hacks'。我的模板在加载页面的末尾加载javascript文件'layoutfixes.js',它改变了一些生成的组件。生成的组件有各种ID或根本没有它们,所以有时我必须以可怕的方式获取元素,如下所示:
var tdNodes = document.getElementById('tabbedPanel').childNodes[1].childNodes[0]. ... .childNodes[0];
但正如我所说,不是每个页面都有这些组件,所以上面的行抛出错误,该元素为null。我不会在任何地方添加检查页面上是否存在这样的元素。我应该在那个javascript中添加类似“try {} catch(Exception e){}”的内容。但我对javascript不够熟悉。在javascript中是这样的吗?
答案 0 :(得分:1)
哈克是你在那里做的正确的话。由于你已经进入了hackery的世界,你可以用try / catch添加另一个:
try {
document.getElementById('tabbedPanel').childNodes[1]
}
catch ( ex ) {
// do nothing
}
答案 1 :(得分:1)
Javascript确实有try/catch
实现:
try {
// add code that can throw exceptions
}
catch (e) {
// statements to handle any exceptions
}
答案 2 :(得分:1)
Java脚本支持异常处理。您可以编码为:
try {
foo.bar();
} catch (e) {
alert(e.name + ": " + e.message);
}
您可以在此处找到更多信息:http://www.w3schools.com/js/js_errors.asp
答案 3 :(得分:1)
您可以使用Try 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] );
}
}