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>真ん中の2つのタグが逆です。であってはなり</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 に答える