我将以下代码应用到控制台,以从网页中获取信息:
var elements = document.getElementsByClassName( 'company_name' ),
innerHTMLs = [];
for ( var i = 0; i < elements.length; ++i )
innerHTMLs.push( elements[i].innerHTML );
console.log( innerHTMLs );
如果没有给定元素的innerHTML,我应该怎么做才能得到0或null?
致谢
答案 0 :(得分:1)
var elements = document.getElementsByClassName( 'company_name' ),
innerHTMLs = [];
for ( var i = 0; i < elements.length; ++i ){
innerHTMLs.push( elements[i].innerHTML?elements[i].innerHTML:0 );
console.log( innerHTMLs );
}
代码elements[i].innerHTML?elements[i].innerHTML:0
使用ternary operator
来模拟一个内联if语句,其中?
之前的部分定义了条件语句,之后的部分是如果条件语句返回的值陈述是正确的。如果条件评估为假,则返回:
之后的部分。
如果您要写完整的内容,它将成为以下内容(因为您是javascript新手,所以也很了解):
if (elements[i].innerHTML) {
innerHTMLs.push(elements[i].innerHTML);
} else {
innerHTMLs.push(0);
}
其他信息
为了使它更好地工作,还有一些事情可以/必须更改。
在声明计数器(在这种情况下为 i
)时,您想使用let
而不是var
。在您的示例中,它没有任何区别。但是,当您要在同一作用域中使用另一个循环时,区别就来了。 var
的作用域是全局或函数的整个区域,而let
的作用域是块级的变量,这意味着let
的计数器名称为 { {1}} 仅在for循环中声明。这是可取的,因为您显然不想使用其他字母或类似 i
, ii
之类的东西作为计数器。这使代码更具可读性,并且不太可能产生意外行为。
iii
使用后使用增量:对var elements = document.getElementsByClassName( 'company_name' ),
innerHTMLs = [];
for (let i = 0; i < elements.length; ++i ){
innerHTMLs.push( elements[i].innerHTML?elements[i].innerHTML:0 );
console.log( innerHTMLs );
}
的清零表示在使用计数器之前先对它进行增量。在某些情况下,这很有用,但是在这种情况下,它会跳过++i
数组中的第一个Item。出于您的目的,请使用elements
,因此在进行第一次迭代时,计数器将为i++
。第一次迭代时使用0
很重要,因为数组从0
而不是0
开始索引。
1
答案 1 :(得分:0)
您可以使用element.innerHTML.trim() != ""
来检查是否已修剪(删除字符串开头和结尾的所有空格都不等于空字符串。如果字符串为空则返回true。
例如:
for ( var i = 0; i < elements.length; ++i ) {
if(elements[i].innerHTML.trim() != "") {
innerHTMLs.push( elements[i].innerHTML );
console.log( innerHTMLs );
}
}