使用纯javascript

时间:2015-09-08 16:40:18

标签: javascript dom

我想从使用

获得的元素列表中收集所有文本

var elements =document.body.getElementsByTagName("*");

到目前为止我做了什么:

var text = '';
for (var i = 0; i < elements.length; i++) {
  text = text + ' ' + elements[i].innerText
}

这将返回重复的文本,因为它获取每个元素及其子元素的自己的文本。我想知道是否有办法使用纯javasript获取元素的自己的文本?

1 个答案:

答案 0 :(得分:0)

我认为问题是特定标签的嵌套匹配元素被计算两次。解决方案是检查我们是否已经访问了父元素,并且如果是这种情况则跳过子元素。

var text = '';
var visited = [];
for (var i = 0; i < elements.length; i++) {
  var found = false;
  for (var e = elements[i]; e != null; e = e.parentNode) {
    if (visited.indexOf(e) > -1) {
      found = true;
      break;
    }
  }
  if (!found) {
    text = text + ' ' + elements[i].innerText;
    visited.push(elements[i]);
  }
}

http://jsfiddle.net/h8k0xx82/