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
document.querySelector('div.someclass').childNodes.slice(5) # TypeError
那么有什么方法可以让所有子文本节点从hr
节点开始?
更新
我忘了提到这个问题是关于网页抓取,而不是网页开发......我无法更改HTML源代码
答案 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.