2

我想检查元素是否存在并且其中一种方法不为空?

请看下面的代码:

                 
变量描述;           
var desc = 预测[i].getElementsByTagName('desc')[0]
if (desc != null || desc.textContent == "") {
    描述 = desc.textContent
}

所以基本上如果元素没有定义它会给我一个错误:

Uncaught TypeError: Cannot read property 'textContent' of undefined

好吧,我可以使用 nested ifs,但我认为应该有一个更好的解决方案来解决这个问题。

4

2 回答 2

3

你的条件不对:

desc != null || desc.textContent == ""

因为undefined != null评估为false,条件然后将尝试访问desc.textContent

如果内容存在且不为空,您似乎想要复制内容;这可以在以下条件下完成:

var description,
desc = forecasts[i].getElementsByTagName('desc')[0];

if (desc && desc.textContent.length) {
    description = desc.textContent;
}
于 2013-05-18T07:46:22.740 回答
1
var description;           
var desc = forecasts[i].getElementsByTagName('desc')[0]
if (desc && desc.textContent) {
    description = desc.textContent
}

var string = ""; if (string)在 JavaScript 中评估为 false,因此您可以简单地删除相等检查并确保它desc.textContent不会评估为 false。

您还应该删除 OR 运算符,正如您所说的,如果desc存在但desc.textContent不继续获取desc.textContent。用 AND 运算符替换您的 OR 语句if (desc && desc.textContent)

示例: http: //jsfiddle.net/pFBpc/5/ - 注意有 3 个 if 语句,但只有一个计算结果为 true。

于 2013-05-18T07:47:23.413 回答