0

前回の投稿について質問があります

HTMLマークアップからテキストを抽出する方法

Oriol の回答は、テーブル構造間で html マークアップを分離するのに大いに役立ちます。

ただし、別の問題があります。

var project =[''];

$('#htmlData').contents().each(function(){
    if($(this).is('table')){
         //do something with table
         project.push['end of table'];  //this line of codes is the problem....
    }else{
        project[project.length-1] += (
            this.nodeType === 3  ?  $(this).text()  :
            (this.nodeType === 1  ?  this.outerHTML  :  '')
        );
    }
});

for(var i=0; i<project.length; ++i){
    project[i] = project[i].replace(/\s+/g,' ') // Collapse whitespaces
    .replace(/^\s/,'') // Remove whitespace at the beginning
    .replace(/\s$/,''); // Remove whitespace at the end
}

html次のようなデータがあるとしましょう

<em>first part</em> of texts here

    <table>
    ......
    ......
    </table>

<em>second part</em> of texts

私のプロジェクト配列は次のようになります。

 //2 elements
    ('<em>first part</em> of texts here','end of table <em>second part</em> of texts) 

しかし、私の望む結果は

  //3 elements
    ('<em>first part</em> of texts here','end of table','<em>second part</em> of texts) 

end of tablearrayセレクターloopをマークアップする場合にプッシュするものtableです。

どうすればこれを達成できますか? 助けてくれてありがとう!

4

1 に答える 1

1

問題は、テーブルが処理された後、配列内に新しい位置を作成していないことです。この場合、 project.length-1 は常に「テーブルの終わり」の位置を参照するため、次の「テーブル以外」のデータを連結するだけです。

これを試して:

    var project =[''],
    j = 0;

$('#htmlData').contents().each(function(){
    if($(this).is('table')){
         //do something with table
         project.push('end of table');  //this line of codes is the problem....
         j=project.length;
    }else{
        if (project[j] == undefined) project[j] = "";
        project[j] += (
            this.nodeType === 3  ?  $(this).text()  :
            (this.nodeType === 1  ?  this.outerHTML  :  '')
        );

    }
});
for(var i=0; i<project.length; ++i){
    project[i] = project[i].replace(/\s+/g,' ') // Collapse whitespaces
    .replace(/^\s/,'') // Remove whitespace at the beginning
    .replace(/\s$/,''); // Remove whitespace at the end
}
console.log(project);

よりクリーンな方法があると確信していますが、これでアイデアが得られるはずです。

于 2013-07-25T21:47:50.527 に答える