我们在这里面临的挑战是 javascript 也将空格识别为文本节点。因此,从 javascript 的角度来看,这个 HTML:
<div id="test">
<h2>Try 1</h2>
Test Test Test
<h2>Try 2</h2>
</div>
与此 HTML 不同:
<div id="test"><h2>Try 1</h2>
Test Test Test
<h2>Try 2</h2>
</div>
在第一种情况下, 中的第一个节点div
是 textNode ( nodeType == 3
) 在第二个 HTML 示例中, 中的第一个节点div
是h2
节点。
我为此想出了一个解决方案,这是一个方便的函数,它遍历结合了 jQuery 和本机 javascript 的所有元素。
解决方案
var objNodes = $(".wrapper").contents().get();
function loopNodes(objNodes, i) {
i = (typeof i === "undefined") ? 0 : i;
if (objNodes[i].nodeType !== 3) {
return {"isHeader":true, "first":$(objNodes[i])};
} else {
var strText = objNodes[i].innerText || objNodes[i].textContent;
if ($.trim(strText).length === 0) {
return loopNodes(objNodes, i+1);
} else {
return {"isHeader":false, "first":null};
}
}
}
用法
var objResults = loopNodes(objNodes);
if (objResults.isHeader) {
console.log("Coolness");
objResults.first.text("AWESOME FIRST HEADER!");
} else {
console.log("Less Coolness");
}
在行动:http:
//jsbin.com/welcome/61883/edit
编辑:添加了获取 innerText/textContent 的跨浏览器方式。有关此事的完整参考资料,请参阅Quirksmode。