获取具有相同类但具有过滤器的div的内部文本

时间:2018-10-05 10:28:50

标签: javascript

我将以下代码应用到控制台,以从网页中获取信息:

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?

致谢

2 个答案:

答案 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 );
  }
}