根据这篇文章下面的第一条评论编辑了我的答案。
Javascript
var nodeTypes = [];
function getContent(elm) {
if (elm.nodeType != 1 && elm.nodeType != 3) return;
// skip if it's not an element or text node
if (elm.nodeType == 1) { // element
var comp = window.getComputedStyle(elm,null);
var disp = comp.getPropertyValue('display') != 'none';
var hidden = comp.getPropertyValue('visibility') == 'hidden';
if (!disp || hidden) return;
// skip if it's hidden
if (elm.childNodes.length) {
for (var i = 0; i < elm.childNodes.length; i++)
getContent(elm.childNodes[i]);
return;
}
}
if (/^\s+$/.test(elm.nodeValue)) return;
// skip if it's empty
nodeTypes.push((elm.nodeType == 3 ? 'text node' : elm.nodeName).toLowerCase());
}
</script>
CSS
<style type="text/css">
a span {display:none;}
</style>
HTML
<body>
<div class="div1class">
<div class="div2class">
<p>
some text here
<img src="img.jpg" />
some text here too
</p>
</div>
<div>
<a href="#">Anchor example<span>hidden element</span></a>
</div>
<!-- some comment -->
<div class="div3class"><img src="img2.jpg" /></div>
</div>
<script type="text/javascript">
nodeTypes = [];
getContent(document.getElementsByClassName('div1class')[0]);
console.log(nodeTypes);
</script>
</body>
输出
["text node", "img", "text node", "text node", "img"]
您将需要考虑许多可能性,例如在代码中可能看起来为空但实际上具有背景图像的元素。使用 jQuery 这会更可靠。