jQuery - 将所有未包装的文本包装在p标签中

Tom*_*Tom 5 javascript jquery

我有一种情况,以下代码被写入我的页面.

<div>
    Some text here which is not wrapped in tags
    <p>Some more text which is fine</p>
    <p>Blah blah another good line</p>
</div>
Run Code Online (Sandbox Code Playgroud)

在这种情况下,它似乎总是第一行没有包装在p标签中,这可能使解决方案变得更容易,尽管并非每次都如此.有时候很好.

我需要做的是确定第一行是否被包装,如果没有,则包装它.

不幸的是我不知道从哪里开始这个问题所以任何帮助将不胜感激.

Ara*_*ani 4

尝试使用此代码来包装任何未用<p>标签包装的 TextNode。

\n\n
function getTextNodesIn(node, includeWhitespaceNodes) {\n    var textNodes = [], whitespace = /^\\s*$/;\n\n    function getTextNodes(node) {\n        if (node.nodeType == 3) {\n            if (includeWhitespaceNodes || !whitespace.test(node.nodeValue)) {\n                textNodes.push(node);\n            }\n        } else {\n            for (var i = 0, len = node.childNodes.length; i < len; ++i) {\n                getTextNodes(node.childNodes[i]);\n            }\n        }\n    }\n\n    getTextNodes(node);\n    return textNodes;\n    }\n\n    var textnodes = getTextNodesIn($("#demo")[0])\xe2\x80\x8b\xe2\x80\x8b\xe2\x80\x8b\xe2\x80\x8b;\n    for(var i=0; i < textnodes.length; i++){\n        if($(textnodes[i]).parent().is("#demo")){\n            $(textnodes[i]).wrap("<p>");\n        }\n    }\xe2\x80\x8b\n
Run Code Online (Sandbox Code Playgroud)\n\n

这是一个jsfiddle,展示了这一点的实际效果。

\n\n

PS:TextNode检测部分借用了这个答案

\n

  • 干得好!我添加了一些 CSS 以使结果更清晰:http://jsfiddle.net/reWXX/2/ (3认同)