Javascript - 替换CMS格式化内容中的标签。 II

时间:2012-04-13 16:26:01

标签: javascript

我正在处理一个像这样格式化文本块的CMS:

  

<p id="V01-cntntTxt"> Lorem ipsum dolor坐下来,念诵adipistur   elit。<br> Vivamus lacus ipsum,semper non consequat eu,facilisis at   lectus。 Vestibulum et magna ac <br> odi semper porttitor lacinia   congue orci。 Vivamus suscipit eleifend dolor,in herererit <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简历lorem vitae risus dapibus malesuada congue   vel nunc。</p>

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

这是理想的结果:

  

<p id="V01-cntntTxt"> Lorem ipsum dolor坐下来,精神恍惚。 Vivamus   lacus ipsum,semper non consequat eu,facilisis at lectus。前庭   et magna ac odi semper porttitor lacinia congue orci。 Vivamus   suscipit eleifend dolor,in 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>标记用于换行符。< / p>

我试过这个,它几乎可以工作:

<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坐下来,念念   adipiscing elit。 Vivamus lacus ipsum,semper non consequat eu,   在lectus的facilisis。 Vestibulum et magna ac odio semper porttitor   lacinia congue orci。 Vivamus suscipit eleifend dolor,in herererit   turpis bibendum ut。<p></p> Morbi interdum augue et nisl ullamcorper   坐在amet ornare lorem tempus。 Duis nec nisi quis ipsum pulvinar   volutpat。 Suspendisse venenatis malesuada metus,nec pretium dui   cursus eget。 Donec简历lorem vitae risus dapibus malesuada congue   vel nunc。</p>

1 个答案:

答案 0 :(得分: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
})

还有一个演示here