2016-01-06 165 views
0

我在一些测试页中使用此命令DOM:继续执行DOM命令

document.querySelector('div#summary-item div.description').innerHTML || "" 

但在一些网页时,第一部分不存在,我没有收到第二“”但我收到此错误我PROGRAMM停止

Uncaught TypeError: Cannot read property 'innerHTML' of null(…) 

有没有什么简单的方法来获得“”,而不需要使用typeof在if语句?

回答

1

您不需要typeof但您确实需要一个if语句或其他一些流控制。

var el = document.querySelector('div#summary-item div.description'); 
var data = ""; 
if (el) 
    data = el.innerHTML; 

或者这里使用条件运算符:

var el = document.querySelector('div#summary-item div.description'); 
var data = el ? el.innerHTML : ""; 

从技术上讲,你可以逃脱不使用流控制语句或表达使用具有.innerHTML属性的对象。

var data = (document.querySelector('div#summary-item div.description') || {innerHTML:""}).innerHTML; 

但我认为这是丑陋的。语句是if语言的一部分。不知道为什么你想避免它。


当然,如果它真的困扰你,你总是可以使用一个将它抽象出来的函数。

function htmlFromElem(selector) { 
    var el = document.querySelector(selector); 
    return el ? el.innerHTML : ""; 
} 

然后使用它是这样的:

var data = htmlFromElem('div#summary-item div.description')