1

次のような繰り返しのコード行がある html の一部を解析しようとしています。

<a>This is <span>some text</span> but its <span>not grabbing the span</span> content</a>

だから私はオブジェクトをループしてこれを抽出しています:

object.a[i].text();

しかし、それは戻ってくるだけです

"This is  but its  content"

子ノード内のテキストもすべて 1 つの文字列として取得するにはどうすればよいですか?

乾杯

4

2 に答える 2

0

Rhinoではこれは機能します:

var a = <a>This is <span>some text</span> but its <span>not grabbing <b>the</b> span</span> content</a>;
print(XML_innerText(a));

function XML_innerText(node) {
    var result = [];
    for each (var i in node.descendants()) {
        if (i.nodeKind() == 'text') {
            result.push(i);
        }
    }
    return result.join(' ');
}

ecma / jsのより高度なバリアントでは、同じコードを使用できますが、それをXML.prototype.innerTextに移動してから、のようなものをa.innerText()直接呼び出します。

于 2012-12-08T17:02:02.753 に答える
0

E4X はわかりませんが、純粋な JavaScript で問題ないと思いますか?

textContent バージョン 9 より前の IE とは互換性がないようです。これ textContentは、利用可能な場合に機能します。ただし、IE8 を持っていないのでテストできませんが、これでも動作するはずです。

var obj = (!object.a[i].innerText) ? object.a[i].textContent : object.a[i].innerText;

これはクライアント側の実装では機能しますが、実装では機能しないため、セットアップに固有の何かが必要になると思います。残念ながら、そこでできることはあまりありません。ただし、純粋な JS をもう 1 つ突き刺します。これは、object.a[i] の各子ノードを反復処理し、それが textNode または elementNode であるかどうかを判別し、それぞれデータまたは innerHTML をプルします。

var doesThisWork = '';
var children = object.a[i].childNodes;
for(x in children){
doesThisWork += (children[x].nodeType === 1) ? children[x].innerHTML : children[x].data;
}

jQuery のバージョンはそのままにします。

内容:

object.a[i].contents().text();
于 2012-07-28T01:00:22.637 に答える