2

次のようなデータを返す、変更できない Web サービスから返されるコンテンツがあります。

<div id="entrance" style="">
    Habilitação / Diploma de Ensino Medio Diploma de Ensino Pre Universitario 
    <br>
    <br>
    Diploma Record of study 
</div>

jQueryを使用して、2つの文を別々の < p > タグでラップするにはどうすればよいですか? .wrap を使用できることはわかっていますが、それではコンテンツ全体がラップされます。正規表現は必要ですか?

ありがとう、トーマス

アップデート:

私の要件は、段落の代わりにリストを必要とするように変更されたため、以下の回答を使用して、少し変更して < li > で囲み、全体を < ul > で囲みました。

jQuery('#entrance').show();
jQuery('#entrance').html(data).contents().each(function () {
if ( this.nodeType === 3 ) jQuery( this ).wrap( '<li />' );
    else jQuery( this ).remove();
});
jQuery('#entrance').wrapInner('<ul />');
4

2 に答える 2

4

どうですか:

$( '#entrance' ).contents().each(function () {
    if ( this.nodeType === 3 && $.trim( this.data ) !== '' ) {
        $( this ).wrap( '<p />' );
    } else {
        $( this ).remove();
    }
});

ライブデモ: http://jsfiddle.net/ZMD6m/5/

私のコードは、空でないすべてのテキストノードをそのテキストを含む段落に変換します。他のすべてのタイプのノードは削除されます。

于 2012-08-07T19:45:23.803 に答える
1

このアプローチは$(this).text()、各サブ要素の長さを見つけるために使用します。ゼロの場合は削除され、それ以外の場合は段落にラップされます。

$('#entrance').contents().each(function(i,el) {
    if ($.trim($(this).text()).length) {
        $(this).wrap('<p>');
    } else {
        $(this).remove();
    }
});​

http://jsfiddle.net/mblase75/ZMD6m/3/

于 2012-08-07T19:55:50.300 に答える