0

可能重复:
如何在 javascript 中捕获异常?

我正在更改旧的 Web 应用程序。不幸的是,一些布局更改是生成的组件,我没有找到任何合理的解决方案,所以我被迫使用“javascript hacks”。我在加载页面末尾的模板加载了更改某些生成组件的 javascript 文件“layoutfixes.js”。生成的组件有各种 Id 或根本没有它们,所以有时我不得不以可怕的方式获取元素,如下所示:

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

但正如我所说,并非每个页面都有这些组件,所以上面的行会抛出元素为空的错误。我不会在任何地方添加检查页面上是否存在这样的元素。我希望在该 javascript 中添加类似“try{} catch(Exception e){}”的内容。但我对javascript不够熟悉。在javascript中是这样的吗?

4

4 回答 4

1

Java 脚本确实支持异常处理。您可以编码为:

try {
    foo.bar();
} catch (e) {
    alert(e.name + ": " + e.message);
}

你可以在这里找到更多信息:http: //www.w3schools.com/js/js_errors.asp

于 2013-01-10T13:23:38.633 回答
1

哈克是你在那里所做的事情的正确词。由于您已经进入了hackery 的世界,您不妨添加另一个带有 try/catch 的内容:

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

更多信息在这里:http ://www.w3schools.com/js/js_errors.asp

于 2013-01-10T13:20:59.357 回答
1

Javascript 确实有一个try/catch实现:

try {
    // add code that can throw exceptions
}
catch (e) {
   // statements to handle any exceptions
}
于 2013-01-10T13:21:07.207 回答
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] );
  }  
}
于 2013-01-10T13:26:16.223 回答