2013-05-18 24 views
2

我想检查一下这个元素是否存在,其中一个方法是否为空?除了这个未定义的方法,你会怎么样

请看看下面的代码:

     
var description;   
var desc = forecasts[i].getElementsByTagName('desc')[0] 
if (desc != null || desc.textContent == "") { 
    description = desc.textContent 
} 

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

Uncaught TypeError: Cannot read property 'textContent' of undefined

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

回答

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; 
} 
+2

其实undefined == null是真的。试试看...只有undefined === null是错误的。问题出在你的答案 – MofX

+0

@MofX你“修复”或运营商感谢您发现,我的意思是说它评估为'虚假',但我忘了把它放在我的答案:) –

+0

似乎最好的答案,谢谢 –

1
var description;   
var desc = forecasts[i].getElementsByTagName('desc')[0] 
if (desc && desc.textContent) { 
    description = desc.textContent 
} 

var string = ""; if (string)计算为false在JavaScript这样你就可以直接删除平等检查,确保desc.textContent计算结果不是假的。

如果desc存在但您还应该删除OR运算符,但desc.textContent不会继续并且得到desc.textContent。用AND运算符if (desc && desc.textContent)替换您的OR语句。

示例:​​- 请注意,有3条if语句,但只有一条评估为true。

+0

'desc.textContent'实际上会导致错误,因为在这种情况下'desc'没有被定义。 –

+0

@Jack我看到只是测试这个,我已经更新了我的答案。 –

+0

该代码现在是正确的,但答案的其余部分似乎没有涉及到它。 –

相关问题