Javascript 从段落内的文本创建新节点

Javascript 从段落内的文本创建新节点,javascript,jquery,html,Javascript,Jquery,Html,我有一个有很多段落的网站。其中一些具有文本和图像: <p>first paragraph</p> <p>second paragraph</p> <p>third paragraph</p> <p>fourth paragraph<img alt="alt" src="src"/></p> <p>fifth paragraph</p> 怎么样 $('p')。每个函

我有一个有很多段落的网站。其中一些具有文本和图像:

<p>first paragraph</p>
<p>second paragraph</p>
<p>third paragraph</p>
<p>fourth paragraph<img alt="alt" src="src"/></p>
<p>fifth paragraph</p>
怎么样

$('p')。每个函数(索引,p){
p、 查找('img')。每个(函数(){
如果(p.text()!=“”){
var newparagration=$(“

”); var html=p.html(); 新增段落。追加($(本)); if(html.substring(0,1)!='一种方法:

$('p').each(function(index, p) {
    p.find('img').each(function() {
        if (p.text() != '') {
            var newParagraph = $('<p></p>');
            var html = p.html();
            newParagraph.append($(this));

            if (html.substring(0,1) != '<') {
                p.after(newParagraph);
            }
            else {
                p.before(newParagraph);
            }

        }         
    });
});

$('p').each(function(i) {
   $(this).attr('id', i);
});

我修改了第一段代码以保留childNodes的顺序(这有缺陷(请查看
img
后面的第二段
textNode
,它位于错误的位置):


.

没有理由用ID枚举元素-顺便说一句,只有数字ID无效。@Bergi:在HTML5中不是。你可以避免使用
var p=$(this);
with
each()
each(函数(索引,元素){//element==this,$(el)==$(this)})是的,我刚刚看到了你的答案。先生,你是一个javascript忍者+1@Andreas:谢谢!虽然我有点失望,因为我不能把这两条链子结合起来(我知道为什么我不能,但是……该死,那样看起来很乱!)。我不知道在哪里检查是在文本之前还是之后。我不知道,我只是假设第一个子节点(无论它是什么)应该保留在
这个
(当前)元素中,以及后面的任何元素(无论是
文本节点
还是
img
(或其他任何内容))应该附加到一个新的
p
元素,并插入到当前元素后面。Smart。我不知道。看起来你刚刚有了一个风扇!:)
<p id="1">first paragraph</p>
<p id="2">second paragraph</p>
<p id="3">third paragraph</p>
<p id="4"><img alt="alt" src="src"/></p>
<p id="5">fourth paragraph</p>
<p id="6">fifth paragraph</p>
elem.find('p').each(function () {
    id++;
    $(this).attr('id', 'id_' + id);
});
$('p').each(function(index, p) {
    p.find('img').each(function() {
        if (p.text() != '') {
            var newParagraph = $('<p></p>');
            var html = p.html();
            newParagraph.append($(this));

            if (html.substring(0,1) != '<') {
                p.after(newParagraph);
            }
            else {
                p.before(newParagraph);
            }

        }         
    });
});

$('p').each(function(i) {
   $(this).attr('id', i);
});
$('p').each(
    function(i){
        while(this.childNodes.length > 1) {
            var p = document.createElement('p');
            p.appendChild(this.childNodes[1]);
            this.parentNode.insertBefore(p,this.nextSibling);
        }
    });

$('p').attr('data-index',function(i) { return i; });​​​​​​​​​​​
$('p').each(
    function(i){
        while(this.childNodes.length > 1) {
            var p = document.createElement('p');
            p.appendChild(this.lastChild);
            this.parentNode.insertBefore(p,this.nextSibling);
        }
    });