2

タブ区切りの文字列をhtmlテーブルに変換するためにjQueryでjavascriptを使用しようとしています。

入力文字列では、行は で区切られ<br/>、列は で区切られていますtabs

これが私がこれまでに持っているものです:

  $(function(){
    $('div.jstable').each(function(){

      var text = $(this).html();
      var rows = text.split(/<br>/i);
      var htmlString = "<table class='display dataTable'>"
      var startTbody = true;
      for(i = 0; i< rows.length; i++){
        // build header section
        if (i == 0){
          htmlString += '<thead>';
        }else {
          if (startTbody){
            htmlString += '<tbody>';
            startTbody = false;
          }
        }
        htmlString += '<tr>';

        var row = rows[i];
        var columns = row.split('\t'); 
        // build columns
        for (j = 0; j < columns.length; j++ ){
          if (i == 0){
            htmlString += '<th>' + columns[j] + '</th>';
          }else {
            htmlString += '<td>' + columns[j] + '</td>';
          }
        }

        htmlString += '</tr>';
        if (i == 0){
          htmlString += '</thead>'
        } else {
          if (i == rows.length - 1){
            htmlString += '</tbody>'
          }
        }
      }
      htmlString += '</table>';
      $(this).html(htmlString);
    })
  });

そして、ここに入力テキストがあります:

  <div class="jstable" style="float: left">
col1    col2    col3<br />asda  fd  dfs<br />mmmm   ffff    ssss
  </div>

残念ながら、IE8/7 では、jquery .html() 関数によって返されるテキストのすべてのタブがスペースに置き換えられています。

IE9 は問題なく、現在のバージョンの Firefox と Chrome も問題なく動作します。

何か案は?

4

2 に答える 2

2

split()に正規表現を渡すことができます。/\s+/任意の種類の連続する空白を単一の区切り文字と見なします。

>>> "one   two".split(/\s+/)
["one", "two"]

>>> "one\ttwo".split(/\s+/)
["one", "two"]

>>> "one\ntwo".split(/\s+/)
["one", "two"]
于 2012-06-09T08:08:28.067 に答える
1

<pre>FWIW入力テキストをタグで囲むと、.html()関数がIE7/8のタブ付きのテキストを期待どおりに返すことがわかりました。

したがって、最初のサンプルソースhtmlは次のようになります。

  <pre class="jstable" style="float: left">
col1    col2    col3<br />asda  fd  dfs<br />mmmm   ffff    ssss
  </pre>
于 2012-06-11T07:55:05.037 に答える