【问题标题】:Javascript Split() doesn't workJavascript Split() 不起作用
【发布时间】:2012-10-15 00:40:45
【问题描述】:

我有一个 php 脚本,它基本上只加载一个 csv:

echo json_encode(file(csvfile.csv, FILE_IGNORE_NEW_LINES));

输出是这样的:

["foo,bar,baz","foo, foo,bar","bla,bla,blubb"]

在我的基本 html 文件中,我以这种方式加载它:

 $(document).ready(function(){
    $.getJSON("curlcsvfetcher.php", function(data) { 
    $('#data').empty();
    var columnseperator     =  "|";
    var commentindicator    = "#"; 
    var textqualifier   = '"' 
    filltable2(data,columnseperator,commentindicator,textqualifier); }
 );

这适用于函数filltable(),但不适用于filltable2()

function filltable(data,columnseperator,commentindicator,textqualifier){
    var table_obj = $('table');
    $.each(data, function(index, item){
         table_obj.append($('<tr id="'+item+'"><td>'+item+'</td></tr>'));
    }).insertAfter('.table');
} 
function filltable2(data,columnseperator,commentindicator,textqualifier){
    var table_obj = $('table');
    var trstart = '<tr>';
    var trend = '</tr>';
    $.each(data, function(index, item){
        table_obj.append($('<tr id="'+item+'"><td>'+item+'</td></tr>'));
        var columns = data.split(columnseperator);
        var tddata = '';
        for (var column in columns){
            tddata = tddata +'<td>'+column+'</td>';
            }
        var rowdata = trstart + tddata + trend;
        table_obj.append($(rowdata));

    }).insertAfter('.table');
} 

函数filltable() 生成一列三行的输出。 但现在我想分解(本例 3)列中的每一行。

函数filltable2()中的代码一定有问题,我不知道我做错了什么。

filltable2() 的输出只是表格中的一行。

非常感谢!

PS:这个问题与我的last question有关,但我认为基本问题无关,所以我创建了一个新问题

【问题讨论】:

  • 愚蠢的问题,你在 CSV 中传递竖线作为分隔符,对吧?
  • 仅供参考,gonzofish 和 Yogendra 都在代码中发现了一个缺陷。这两个问题都需要解决。

标签: javascript jquery split


【解决方案1】:

我建议更改您的 for 循环:

    for (var column in columns){
        tddata = tddata +'<td>'+column+'</td>';
    }

作为:

for (var i= 0; i < columns.length; i++){
  tddata = tddata +'<td>'+columns[i]+'</td>';
}

试试这个方法。如果它不起作用。请在循环前提醒data,在循环后提醒tddata并分享。

【讨论】:

  • 谢谢,for 循环很容易调试。
  • 同意。将for ... in 与数组一起使用有一些众所周知的问题,从无法保证键顺序到猴子补丁的 Array.prototype 方法溢出。
【解决方案2】:

我认为这是因为在分割线中,你给了它:

data.split(columnseperator);

当你的意思是

item.split(columnseperator);

data[index].split(columnseperator);

【讨论】:

  • 或数据[index].split(columnseperator);
  • 谢谢你们。这太容易了,我想我得去睡觉了。凌晨 3 点不是写代码的好时间 :-) 非常感谢!
猜你喜欢
  • 2012-01-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-08
  • 1970-01-01
  • 2013-03-22
  • 1970-01-01
相关资源
最近更新 更多