1

次のような子ノードからテキストを削除できるコードがあります。

$.fn.removeText = function() {
    for (var i=this.length-1; i>=0; --i) removeText(this[i]);
};
function removeText(node) {
    if (!node) return;
    for (var i=node.childNodes.length-1; i>=0; --i) {
        var childNode = node.childNodes[i];
        if (childNode.nodeType === 3) node.removeChild(childNode);
        else if (childNode.nodeType === 1) removeText(childNode);
    }   
} 
$('body').removeText();

だから今、要素を除外しようとしています。たとえば、次のようなスパンです。

$('body:not(span)').removeText();

機能していません。すべてが削除されています。私は運がない他のいくつかの(Jquery)ことを試しました。removeText()関数を変更する必要がありますか? 私は本当にJqueryに固執したいと思います..他に試すことができるものはありますか?

例 JsFiddle

4

5 に答える 5

3

body:not()セレクターの間にスペースを追加する必要があります

$("body :not(span)")

スペースがないと、実際に言うのは、スパン要素ではないボディを私に与えることです。これは常に真であり、ボディ要素だけを返します。

スペースがあると、スパン要素ではないボディ要素のすべての子を私に与えてください。

アップデート:

あなたが見ている問題は、jQueryがテキストノードを選択しないことだと思います(少なくとも私が知る限り)。このSOの回答は、子孫のテキストノードを選択する方法を示唆しています。

:not(span)フィドルでは、選択可能なボディの子孫要素はスパンのみであり、セレクターを使用してその要素からオプトアウトします。

于 2013-03-20T09:39:22.840 に答える
1

これを試して...

$("body").find("*").not('span').removeText();

于 2013-03-20T09:53:52.370 に答える
1

そのセレクターは、スパンではない$('body:not(span)')すべてのbodyタグが必要であることを意味します。

$(':not(span)')代わりに試してください。

于 2013-03-20T09:42:42.570 に答える
0

誰かが興味を持っている場合に備えて、これを行う非常に簡単な方法を見つけました。それはJqueryのドキュメントにあり、すっごく簡単でした...

    $('body *').contents().filter(function() {
      return this.nodeType == 3;
    })

//Then do your thing
      .remove();

JSfiddle の例

于 2013-03-20T14:15:29.303 に答える
0

最も簡単なのは、すべてにラッパーを追加することです。

<div class="wrapper">

http://jsfiddle.net/btevfik/gPB6e/

于 2013-03-20T09:44:57.693 に答える