.TextCont
これにより、ネストされた要素がある場合の問題を回避できます。それが起こらない場合は、not()
[docs]メソッドを取り除くことができます。
var with_dividers = $('.TextCont:contains("--divider--")')
.not('> .TextCont:contains("--divider--")');
with_dividers.html(function(i,htm) {
return '<p>' + htm.split('--divider--').join('</p><p>') + '</p>';
});
例: http://jsfiddle.net/CFLV4/
また、重複した ID は無効であるため、ID をクラスに変更しました。
編集:説明するために、JavaScript では、開始タグと終了タグを追加しません。要素全体を扱うという観点から考える必要があります。
上記のコードでは、html()
[docs]メソッドに関数が渡されます。関数の戻り値は、要素の新しいコンテンツです。htm
パラメータには、現在のコンテンツの文字列が渡されます。
したがって、既存のコンテンツを取得して を実行すると.split('--divider--')
、次のような配列が得られます。
['<span>Lorem</span>',
'<a href="#">ipsum</a>',
'dolor sit amet.'
]
ご覧のとおり、--divider--
テキストは削除され、文字列は元の場所で分割されています--divider--
。
次に、結合テキストとして.join()
使用して、配列に対してa を実行し、次のようにします。'</p><p>'
'<span>Lorem</span></p><p><a href="#">ipsum</a></p><p>dolor sit amet.'
...しかし、もちろん、開始タグと終了タグがないため、それらを開始タグと終了タグに追加します。コードは次のようになります。
'<p>' + htm.split('--divider--').join('</p><p>') + '</p>'
...最終的には次のようになります。
'<p><span>Lorem</span></p><p><a href="#">ipsum</a></p><p>dolor sit amet.</p>'
それが関数の戻り値なので、新しい内容になります。