3

次のシナリオを想像してください。

<span>Item 1</span> | <span>Item 2</span>

| をターゲットにする方法 そしてそれを削除しますか?また、常に | を削除する必要があるとします。spanリストは、「アイテム 2」の前または後にアイテムが追加されて拡大する可能性があります。すべての新しいアイテムは で囲まれspan、| で区切られます。

4

6 に答える 6

4
$('span').each(function() {
    if ($(this).text() == 'Item 2') {
        $(this.previousSibling).remove();
    }
});

http://jsfiddle.net/spFUG/2/

于 2013-02-27T22:13:03.700 に答える
2

テキスト ノードの操作は、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

addBackjQuery 1.8 で追加されたことに注意してください。古いバージョンを使用している場合は、andSelf代わりに使用してください。テキスト ノードのみを削除する場合は、addBack完全に削除します。

于 2013-02-27T22:21:12.130 に答える
0

更新しました

コードからすべての " | " を削除する直接の 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]);
        }
    }

フィドル: http://jsfiddle.net/vg3pc/

于 2013-02-27T22:03:03.643 に答える
0

の親を見つけて、とともにspan使用します。.html().replace()

ジャバスクリプト:

$('span:first-child').parent().html($('span:first-child').parent().html().replace(/\|/g, ''))

デモ: http://jsfiddle.net/dirtyd77/5F3kf/2/

于 2013-02-27T22:16:05.490 に答える
0

.contentsテキスト ノードを検索します。

$("#container").contents().each(function () {
    //Text node
    if (this.nodeType === 3) {
       $(this).remove();
    }
});

http://jsfiddle.net/QQsk5/

于 2013-02-27T22:14:53.453 に答える
0

つかむ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(" "));

http://jsfiddle.net/u59Uz/

編集:この非常に特殊なケースを処理するために同じロジックを使用する汚いハック。正規表現置換は、パイプの前後にある 0 個以上のスペースを処理します。

var $c = $(".container");
var html = $c.prop("outerHTML");

$c.empty();
$c.append(html.replace(/\s*\|\s*<span>Item 2/,"<span>Item 2" ));

http://jsfiddle.net/TnXB7/1/

于 2013-02-27T22:23:57.933 に答える