以下代码应该执行与您的函数完全相同的操作。
<html><body>Hello<p>Hello<br/>Hello 2<br/> <br/> <br/></p><button onclick="wrapText()">Wrap</button><script type="text/javascript"> function wrapText() { var nodeList = document.getElementsByTagName('br'); for (var i=0; i < nodeList.length; i++) { var node = nodeList[i]; var parentNode = node.parentNode; if (!parentNode) continue; for (var c=0; c < parentNode.childNodes.length; c++) { var child = parentNode.childNodes[c]; if (child.nodeType != 3) continue; if (child.nodevalue.match(/[^s]/) != null) { var newElement = document.createElement("b"); newElement.innerHTML = child.nodevalue; parentNode.insertBefore(newElement, child); parentNode.removeChild(child); } } } }</script></body></html>不过,我要指出的是,如果
<br/>是包裹在任何元素,你只得到的的
childNodes该元素,因此,如果它是一个简单的标签,你会只换行文本节点内
<b>与
<ddb></ddb>(那是什么,顺便说一下? )。
你也有一个bug,你是分配text到node.textContent ? node.textContent : node.innerText后来干脆用下一行node.textContent,所以我固定的。我还更改了正则表达式以仅匹配第一个非空白字符,如果确实找到了该字符,则将其包装。



