如何在特定元素

时间:2018-02-09 12:08:25

标签: javascript web-scraping css-selectors

HTML:

<div class="someclass">
    <h3>First</h3> 
    <strong>Second</strong> 
    <hr>
    Third
    <br>
    Fourth
    <br>
    <em></em>
    ...
</div>

从上面的div节点开始,我希望在hr之后获取所有子文本节点("Third""Fourth",...并且可能会有更多)

如果我这样做

document.querySelectorAll('div.someclass>hr~*')

我得到NodeList [ br, br, em, ... ] - 没有文字节点

以下

document.querySelector('div.someclass').textContent

我将所有文本节点都作为单个字符串

我可以将每个文本节点都作为

var third = document.querySelector('div.someclass').childNodes[6].textContent
var fourth = document.querySelector('div.someclass').childNodes[8].textContent

所以我试过

document.querySelector('div.someclass').childNodes[5:]  # SyntaxError

slice()

document.querySelector('div.someclass').childNodes.slice(5)  # TypeError

那么有什么方法可以让所有子文本节点从hr节点开始?

更新

我忘了提到这个问题是关于网页抓取,而不是网页开发......我无法更改HTML源代码

1 个答案:

答案 0 :(得分:2)

您可以获取内容并使用hr分割来获取hr之后的html,然后在div内替换此内容,您就可以操作此div var content = document.querySelector('.someclass').innerHTML; content = content.split('<hr>'); content = content[1]; document.querySelector('.hide').innerHTML = content; /**/ var nodes = document.querySelector('.hide').childNodes; for (var i = 0; i < nodes.length; i++) { console.log(nodes[i].textContent); } 1}}获取您的内容:

.hide {
  display: none;
}
<div class="someclass">
  <h3>First</h3>
  <strong>Second</strong>
  <hr> Third
  <br> Fourth
  <br>
  <em></em> ...
</div>
<div class="hide"></div>
08-02-2018 17:13:49.926 [QuartzScheduler_schedulerService-pc6061518092456074_ClusterManager] INFO  o.s.s.quartz.LocalDataSourceJobStore - ClusterManager: detected 1 failed or restarted instances.

08-02-2018 17:14:06.137 [QuartzScheduler_schedulerService-pc6061518092765988_ClusterManager] WARN  o.s.s.quartz.LocalDataSourceJobStore - This scheduler instance (pc6061518092765988) is still active but was recovered by another instance in the cluster.