次のシナリオを想像してください。
<span>Item 1</span> | <span>Item 2</span>
| をターゲットにする方法 そしてそれを削除しますか?また、常に | を削除する必要があるとします。span
リストは、「アイテム 2」の前または後にアイテムが追加されて拡大する可能性があります。すべての新しいアイテムは で囲まれspan
、| で区切られます。
次のシナリオを想像してください。
<span>Item 1</span> | <span>Item 2</span>
| をターゲットにする方法 そしてそれを削除しますか?また、常に | を削除する必要があるとします。span
リストは、「アイテム 2」の前または後にアイテムが追加されて拡大する可能性があります。すべての新しいアイテムは で囲まれspan
、| で区切られます。
$('span').each(function() {
if ($(this).text() == 'Item 2') {
$(this.previousSibling).remove();
}
});
テキスト ノードの操作は、jquery が得意としないものの 1 つです。ちなみに、ネイティブ ブラウザ API はこれを非常にうまく処理します。定期的に使用したくない場合でも、今回は使用する必要があります。previousSibling
テキスト ノード、コメント ノード、要素ノードのいずれであっても、前のノードを選択します。常に削除したいテキストノードであると想定するのはおそらく安全です:
var $elem = $(":contains('Item 2')");
$elem.map(function(){ //select the preceding node to any element we want to remove
return this.previousSibling
}).addBack() // select the original element node as well
.remove(); // remove both
addBack
jQuery 1.8 で追加されたことに注意してください。古いバージョンを使用している場合は、andSelf
代わりに使用してください。テキスト ノードのみを削除する場合は、addBack
完全に削除します。
更新しました
コードからすべての " | " を削除する直接の JavaScript を次に示します。
var parent = $('span').parent().get(0), children = parent.childNodes, node;
for (node = 0;node < children.length;node++){
if (children[node].data === " | "){
parent.removeChild(children[node]);
}
}
の親を見つけて、とともにspan
使用します。.html()
.replace()
ジャバスクリプト:
$('span:first-child').parent().html($('span:first-child').parent().html().replace(/\|/g, ''))
.contents
テキスト ノードを検索します。
$("#container").contents().each(function () {
//Text node
if (this.nodeType === 3) {
$(this).remove();
}
});
つかむspans
。すべてを削除します。スパンを元に戻します (選択したとおりに.join
編集します)。
<div class='container'>
<span>Item 1</span> | <span>Item 2</span>
</div>
.
var $c = $(".container");
var $spans = $c.find("span");
var htmlSpans = [];
$spans.each(function(){
htmlSpans.push($(this).prop("outerHTML"));
});
$c.empty();
$c.append(htmlSpans.join(" "));
編集:この非常に特殊なケースを処理するために同じロジックを使用する汚いハック。正規表現置換は、パイプの前後にある 0 個以上のスペースを処理します。
var $c = $(".container");
var html = $c.prop("outerHTML");
$c.empty();
$c.append(html.replace(/\s*\|\s*<span>Item 2/,"<span>Item 2" ));