我试图删除javascript中过多的结束标记以及之后的任何内容。
这是一个可能的样本:
<div class="dummy">
<div class="main">
<div></div>
<img src="a.jpg">
<br>
<img src="b.jpg />
<strong>
<span>text</span>
</strong>
</div>
</div>
***excessive tags below***
</div>
</div>
<div class="footer">
text
</div>
</body>
</html>
有关如何有效地做到这一点的任何想法? 我要提取的部分总是一个div,但问题是它可能有多个嵌套的div,我不知道如何处理这种情况。
如果可以通过多个步骤完成或使用回调也可以,只要它有效。
修改 我的问题实际上比看起来容易。 该示例始终以我要提取的div开头。 所以我需要的是找到匹配的结束标记,并过滤后面的任何内容。 不要关心任何其他标签......
答案 0 :(得分:2)
不要使用正则表达式,根据我的理解,你想保留虚拟类div和页脚类div,那么为什么不用那个替换身体呢?
E.g。
var dummy = document.getElementsByClassName('dummy')[0];
var footer = document.getElementsByClassName('footer')[0]
var body = document.getElementsByTagName('body')[0];
body.innerHTML = '';
body.appendChild(dummy);
body.appendChild(footer);
答案 1 :(得分:0)
data='<div class="dummy"><div class="main"><div></div><img src="a.jpg"><br><div></div><img src="b.jpg /><strong><span>text</span> </strong></div><div><div></div></div><div><div></div></div></div>***excessive tags below***</div></div><div class="footer">text</div></body></html>';
var starting_tags = [];
var closing_tags = [];
var startIndex, index=0;
var searchStrLen = 4;
while ((index = data.indexOf('<div', startIndex)) > -1) {
starting_tags.push(index);
startIndex = index + searchStrLen;
}
index,startIndex=0;
searchStrLen = 6;
while ((index = data.indexOf('</div>', startIndex)) > -1) {
closing_tags.push(index);
startIndex = index + searchStrLen;
}
var nest_level=0;
for (var i=0; i<closing_tags.length && nest_level<closing_tags.length && nest_level<=closing_tags.length; ++i) {
for (var j=0+nest_level; j<starting_tags.length; ++j) {
if (starting_tags[j]<closing_tags[nest_level])
nest_level++;
}
}
result = data.substr(startIndex[starting_tags], closing_tags[nest_level-1]+6);
console.log(nest_level);
console.log(starting_tags);
console.log(closing_tags);
console.log(result);
我能够解决它。上面的代码计算div嵌套的级别,如果找到过多的结束标记,则将其删除。