0

我正在处理一个格式化文本块的 CMS,如下所示:

<p id="V01-cntntTxt">Lorem ipsum dolor sit amet, consectetur adipiscing elit。<br>Vivamus lacus ipsum, semper non consequat eu, facilisis at lectus。Vestibulum et magna ac <br>odio semper porttitor lacinia congue orci。Vivamus suscipit eleifend dolor,在 hendrerit <br>turpis bibendum ut。<br><br>Morbi interdum augue et nisl ullamcorper sit amet ornare <br>lorem tempus。Duis nec nisi quis ipsum pulvinar volutpat。Suspendisse venenatis malesuada metus,
nec pretium dui cursus eget。Donec vitae lorem vitae risus dapibus malesuada congue vel nunc。</p>

使用此 CMS 的公司已将使用 SHIFT+Enter x 2 来指示段落分隔符和单个 Shift+Enter 作为换行符作为标准做法。我无法修补或更改 CMS 的工作方式。

这是期望的结果:

<p id="V01-cntntTxt">Lorem ipsum dolor sit amet, consectetur adipiscing elit。Vivamus lacus ipsum, semper non consequat eu, facilisis at lectus。Vestibulum et magna ac odio semper porttitor lacinia congue orci。Vivamus suscipit eleifend dolor,在 hendrerit turpis bibendum ut。</p><p>Morbi interdum augue et nisl ullamcorper sit amet ornare lorem tempus。Duis nec nisi quis ipsum pulvinar volutpat。Suspendisse venenatis malesuada metus, nec pretium dui cursus eget。Donec vitae lorem vitae risus dapibus malesuada congue vel nunc。</p>

我需要<br><br>用结束和开始</p><p>标签替换双标签以保持分节符,然后删除任何剩余<br>的用于换行符的单个标签。

我已经尝试过了,它几乎可以工作:

<script>
$('#V01-cntntTxt').html($('#V01-cntntTxt').html().replace(/<br><br>/g, '</p>'));
$('#V01-cntntTxt').html($('#V01-cntntTxt').html().replace(/<br>/g, ' '));
</script>

但是,结果以一个空段落结束。中间的两个</p></p>标签是反的。它应该是</p><p>而不是<p></p>。似乎正在插入一个开始标签,即使我没有指定它应该。

这是上面脚本的结果,标签向后:

<p id="V01-cntntTxt">Lorem ipsum dolor sit amet, consectetur adipiscing elit。Vivamus lacus ipsum, semper non consequat eu, facilisis at lectus。Vestibulum et magna ac odio semper porttitor lacinia congue orci。Vivamus suscipit eleifend dolor,在 hendrerit turpis bibendum ut。<p></p>Morbi interdum augue et nisl ullamcorper sit amet ornare lorem tempus。Duis nec nisi quis ipsum pulvinar volutpat。Suspendisse venenatis malesuada metus, nec pretium dui cursus eget。Donec vitae lorem vitae risus dapibus malesuada congue vel nunc。</p>

4

1 回答 1

0

似乎替换标签innerHTML<p>的 并没有根据需要创建新<p>标签,因此您应该显式创建一个并在此时将内容拆分为新<p>标签。为此,我们将使用string.split将字符串的内容拆分为一个数组并<p>为每个数组索引创建一个新标签:

var par = $('#V01-cntntTxt'); // our first tag
var splits = par.html().split("<br><br>"); // using the first tag to get the array
par.html(splits[0].replace(/<br>/g, " ")); // handling the first index
splits.splice(0, 1) // deleting the first index so it doesnt happen twice
splits.forEach(function(str){ // iterating through the array of strings
    var nPar = $("<p></p>"); // a new <p> tag
    nPar.html(str.replace(/<br>/g, " ")); // removing single <br>s from it
    nPar.insertAfter(par);
    par = nPar; // if another is found it will insert after this
})

这里也有一个演示。

于 2012-04-13T17:28:58.823 回答