1

テキストを抽出するためにこれを作成しました。

<script type = "text/javascript">
function extractText(node){
    var all = "";
    for (node=node.firstChild;node;node=node.nextSibling){
        alert(node.nodeValue + " = " + node.nodeType);
        if (node.nodeType == 3){
            all += node.nodeValue   
        }
    }
    alert(all);
}
</script>

これは、htmlドキュメントの先頭にあります。体はそのように見えます...

<body onload = "extractText(document.body)">
Stuff
<b>text</b>
<script>
var x = 1;
</script>
</body>

問題は、「Stuff」alert(all);のみが表示されることです。これにより、を実行するときに実際には理解できない大量のnullが追加されます。null=3と数回表示されます。なぜこれが正しく機能しないのか誰か教えてもらえますか?前もって感謝します。alert(node.nodeValue + " = " + node.nodeType);

4

2 に答える 2

3

ドキュメントからテキストが必要な場合は、再帰呼び出しを調べることができます。ただし、子供のことを気にしない場合はif (node.hasChildNodes()){}、次の最初の条件を削除してください。

function extractText(node){
    var txt = '';
    // recursive exploration and option to uncomment the check for a <script>
    // <script>s will have children as the the actual portion being executed
    // is considered a text node (nodeType===3)
    if (node.hasChildNodes()/* && node.nodeName !== 'SCRIPT'*/){
        for (var c = 0; c < node.childNodes.length; c++){
            txt += extractText(node.childNodes[c]);
        }
    }else if(node.nodeType===3){
        txt += node.textContent;
    }
    return txt;
}
alert(extractText(document.body));

また、あなたはおそらくつかまえたいと思うでしょうtextContentnodeValue、それはあなたの呼びかけです. より詳細に取得して、nodeNameが aであるかどうかをテストし、 SCRIPTif (選択した場合) を無視することもできますが、その決定はあなたに任せます。

<script>フォローアップ: これは、テストにコメントを付け、オプションで空白を削除して、遊ぶことができるフィドルです: http://jsfiddle.net/KZuk5/2/

于 2012-12-27T16:19:46.317 に答える
2

ノードにはさまざまな種類があります。具体的には、テキスト ノードと HTML ノードの 2 つに注目しています。テキスト ノードはオブジェクトであり、nodeValue(適切にアクセスしている) というプロパティがあります。nodeValueただし、HTML ノードにはプロパティがありません(というか、 に設定されていnullます)。

HTML ノードの内部値を取得するには、 を使用します.innerHTML

于 2012-12-27T16:16:22.330 に答える