1

これをどのように変換しますか:

<pre>
key 1 value 1

key 2 value 2
value 2.2


key 3 value 3
value 3.1
value 3.2
value 3.3

key 4 value4.1 value4.5

</pre>

これに:

<div><pre>
key 1 value 1
</pre></div><div><pre>
key 2 value 2
value 2.2
</pre></div><div><pre>
key 3 value 3
value 3.1
value 3.2
value 3.3
</pre></div><div><pre>
key 4 value4.1 value4.5

</pre></div>

つまり、連続した空白行* s *(スペース/タブと複数の改行を含めることができます)を</pre></div><div><pre>

私は試した :

var txt = $('pre').text();
txt = txt.replace(/(\r\n|\n|\r)/gm, "</pre></div><div><pre>");
$('div#test').append(txt);

部分的に動作します:各行が変更され、ブロックが失われます。

<pre>改行は\rとしてストックされていますか?\ n?(すべてのOS?すべてのブラウザー?)
これを行うための良い正規表現は何でしょうか?
あなたが私に先に進むことを提案する他の方法はありますか?

4

3 に答える 3

1
  1. テキストを解析して、テキスト行のリストを取得します

  2. 各行をトリミングします

  3. 各行を<div><pre>タグでラップします

  4. 結果を連結します

テキストを解析した後、既存のpre要素を完全に削除します。したがって、「変換」する代わりに、テキストを抽出して、まったく別の要素を作成します。

于 2011-07-07T17:48:51.630 に答える
0

それは私のためにそれをします。それはより良いかもしれません:

$(document).ready(function(){

var lines = $('pre').html().split(/\n\s*\n/);
$('pre').remove();
    for(i = 0; i < lines.length; i++){
        if($.trim(lines[i].length) > 0){
            var preDiv = $('<pre />');
            var keyDiv = $('<div />');
            preDiv.append(keyDiv);
            keyDiv.html(lines[i]);
            $('body').append(preDiv);
        }
    }

});

空白には対応していません。行のtrim()で削除できますkeyDiv.html("key" + $.trim(lines[i]))

于 2011-07-07T18:37:32.987 に答える
0

jQueryのラップ関数を使用できます

$('pre').text($.trim($(this).text()).wrap('<div></div>');
于 2011-07-07T17:49:00.873 に答える