Internet Explorer 8& 7将标签转换为空格

时间:2012-06-09 07:57:40

标签: javascript jquery cross-browser

我正在尝试使用带有jQuery的javascript将制表符分隔的字符串转换为html表。

在输入字符串中,行由<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&amp; Chrome工作正常。

有什么想法吗?

2 个答案:

答案 0 :(得分:2)

您可以将正则表达式传递给split()/\s+/会将任意类型的连续空格视为单个分隔符:

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

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

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

答案 1 :(得分:1)

FWIW我发现如果用<pre>标签包围输入文本,.html()函数将返回带有IE7 / 8中标签的文本,如预期的那样。

因此,最初的示例源html将如下所示:

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