【问题标题】:document.write stops working when no data没有数据时 document.write 停止工作
【发布时间】:2014-09-14 10:07:21
【问题描述】:
document.write(x[i].getElementsByTagName("property")[0].childNodes[0].nodeValue);

当它没有得到任何价值时,它就会停止工作。 这是一个for循环:

var x=xmlDoc.getElementsByTagName("object");
for (i=0;i<x.length;i++)
  { 
  document.write("<table border='1'>");
  document.write("<tr><td>Last Communication</td><td>");
  document.write(x[i].getElementsByTagName("property")[0].childNodes[0].nodeValue);

我该怎么办?

【问题讨论】:

  • 所以在写之前检查x[i].getElementsByTagName("property")[0].childNodes[0].nodeValue的值
  • for (i=0;i
  • 不要像这样使用document.write。最好不要使用document.write。如果您不知道自己在做什么,它有多个难以避免的问题。在任何情况下总是一次写入完整的元素(从开始到结束标记),将所有内容放在一个字符串中并在末尾使用一次document.write

标签: javascript html xml dom


【解决方案1】:

试试这个:

var x=xmlDoc.getElementsByTagName("object");
for (i=0;i<x.length;i++) {
    document.write("<table border='1'>");
    document.write("<tr><td>Last Communication</td><td>");
    var item = x[i];
    if(item !== undefined) {
        var itemElements = item.getElementsByTagName("property");
        if(itemElements.length > 0) {
            if(itemElements[0].childNodes.length > 0) {
                document.write(itemElements[0].childNodes[0].nodeValue || '');
            }
        }
    }
  //...
}

【讨论】:

  • 每次使用索引项数组时 (array[0]) 检查array.length &gt; 0
  • 也,正如 RoToRa 在问题的 cmets 中所写。如果可能,不要在循环中使用 DOM 对象。更好的方法是创建变量 var html = ''; 并将 html 内容连接到它 for(var i = 0; i &lt; array.lenth; i++) html += '&lt;tag&gt;..' + array[i].propertyName + '..&lt;/tag&gt;'; 并在循环和连接后通过 document.write(html);element.innerHtml = html; 将值分配给 DOM 元素
  • 我试过了,有很多选项,但没有一个有效,实际上我需要做的是如果节点完全没有任何内容,我需要在 if 语句中写“Something”
  • 您是否应该使用检查if(node !== undefined &amp;&amp; node.propertyName !== undefined)检查每个可能为空的节点
猜你喜欢
  • 1970-01-01
  • 2018-12-25
  • 1970-01-01
  • 1970-01-01
  • 2014-11-16
  • 1970-01-01
  • 1970-01-01
  • 2015-11-13
  • 2013-05-04
相关资源
最近更新 更多