使用javascript从HTML获取文本

时间:2012-10-12 17:48:36

标签: javascript html dom

我是JavaScript的初学者。 我试图了解如何在js中使用DOM ...

我想从一些网站获得一个文本,无论结构多么复杂,都可以从每个DIV获得。 如果我在下面运行我的代码,它将给我文本但是: patern div从儿童div给我他的文字和文字...然后孩子div给我他的文字... 所以得到了很多重复的文字。

var items = document.body.getElementsByTagName('*');
for(var i=0; i<items.length; i++)
{
  document.write(items[i].textContent);
}

了解当前文本的节点对我来说很重要所以我不能使用它,因为我得到了文本,但我不知道文本的节点:

var body = document.body, textContent = 'textContent' in body ? body.textContent : body.innerText;
document.write(textContent);

我知道解决方案是jQuery。但我正在尝试理解如何在JS中执行此操作。

2 个答案:

答案 0 :(得分:0)

您可以尝试使用jQuery .get()函数获取所有匹配元素。

示例:

var elements = [];
elements = $('div').get();

一旦你拥有了所有元素,你就可以从每个元素中获取文本(如果有的话)并将其存储在另一个数组中,如下所示:

var textStrings = [];
var len = elements.length;
for(var a = 0; a < len; a++)
    textStrings[a] = elements[a].text();

第二个代码块将遍历第一个元素数组并从每个元素中提取文本,并将其保存在名为textStrings的第二个数组中。 &#39; len&#39;变量用于优化JavaScript代码并阻止浏览器评估元素。长度&#39;每次循环。

希望这有帮助。

答案 1 :(得分:0)

在这种情况下,通常textContentinnerHTML方法失败,因为.innerHTML包含子节点的HTML。

但您可以使用另一个属性:childNodes。此列表不仅包含子元素,还包含所有子节点,包括文本节点

var items = document.body.getElementsByTagName('*');
for(var i=0; i<items.length; i++)
{
  var currItem = items[i];
  for(var j = 0; j < currItem.childNodes.length; ++j)
  {
    if(currItem.childNodes[j].nodeName === "#text")
    {
      // the current child node is a text node
      document.write(items[i].textContent);
    }
  }
}

由于每个节点在DOM中都有一个唯一的位置,这将确保每个节点只写一次。

参考文献: