このような何かがそれを行う必要があります:
var pattern = /^<br\/>/;
$("<div.column").each(function() {
var $this = $(this),
text = $this.text();
if(text.match(pattern)) {
$this.text(text.replace('<br/>', ''))
}
});
(無視してください-以下のコメントを理解するためにそのままにしておきます)
編集
これを試して :
var pattern = /^\n*\s*<br>/;
$("div.column").each(function() {
var $this = $(this),
html = $this.html();
if(html.match(pattern)) {
$this.html(html.replace(pattern, ''))
}
});
デモ
@minitechが指摘しているように、元のHTMLに添付されているイベントハンドラーとデータはすべて失われるため、次のいずれかが行われます。
- イベントハンドラ/データをアタッチする前に置換を実行してください
- 置換後にイベントハンドラ/データを再インスタンス化するための対策を講じる
- イベント処理をコンテナ要素に委任する
- 非破壊的である完全に異なる何かをしなさい-@minitechの答えを見てください。
2番目の編集
たくさん遊んだ後、ついに簡潔なものになりました。@minitechのアプローチのほぼ100%jQueryバージョンを試してください:
$('.column').each(function() {
$.each(this.childNodes, function(i, c) {
return !$(c).filter('br').remove().end().text().trim();
});
});
デモ
説明:内部ループは各childNodeに順番にアクセスします。その単一のステートメントは、現在のノードがである場合は削除します<br>
が、現在のノードが空白または空白の場合にのみループを進行させます。.end()
すべてを1つのメソッドチェーンに保持するための賢明な使用に注意してください。
効率:悪い-そのjQueryメソッドチェーンは数CPUサイクルを消費する必要がありますが、それは支払うべき小さな代償のようです。
読みやすさ:灘に近い。
3番目の編集
穏やかなmodを使用すると、これは先頭の空白/ BR/HTMLコメントの任意の組み合わせを処理します。
$('.column').each(function() {
$(this.childNodes).each(function(i, c) {
return !$(c).filter('br').remove().end().text().trim();
});
});
前のバージョンとの違いは、jQueryオブジェクト$(this.childNodes)
はノードの削除による影響を受けないままですが、rawthis.childNodes
は影響を受け、.each()
ループは適切にスキャンされないことです。少なくとも、それが私の最善の説明です。
デモ