Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/394.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在javascript中为textContent设置分隔符?_Javascript_Jquery_Html - Fatal编程技术网

如何在javascript中为textContent设置分隔符?

如何在javascript中为textContent设置分隔符?,javascript,jquery,html,Javascript,Jquery,Html,我正在尝试使用javascript将html表转换为csv文件。我尝试在表格行中循环,从中获取textContent,然后将其保存在一个数组中,然后将该数组转换为csv。但是当我得到textContent时,两个单词之间没有任何分隔符 例如,如果我的html如下所示: var ans = $("#my_table").find("table tr"); <tr> <th>Test1</th> <th>Test2&l

我正在尝试使用javascript将html表转换为csv文件。我尝试在表格行中循环,从中获取
textContent
,然后将其保存在一个数组中,然后将该数组转换为csv。但是当我得到
textContent
时,两个单词之间没有任何分隔符

例如,如果我的html如下所示:

var ans = $("#my_table").find("table tr");

    <tr>
      <th>Test1</th>
      <th>Test2</th>
    </tr>

    <tr>
      <td> Current </td>
      <td> Next </td>
    </tr>
但是,没有空间或任何分隔符。既然我必须以csv格式保存,我如何在循环时放入分隔符

正在查找此输出:

Test1,Test2
Current,Next
我的js代码:

for(var i=0; i<ans.length; i++){
    console.log(ans[i].textContent);
}

for(var i=0;i您必须更改检索行的代码,然后遍历每行单元格

var ans = $("#my_table").rows;
var tableText;

for (var i = 0; i < ans.length; i++) {
    for (var j = 0; j < ans[i].cells.length; j++) {
        if (j == 0) {
            tableText += ans[i].cells[j].textContent;
        } else {
            tableText += "," + ans[i].cells[j].textContent;
        }
    }
    tableText += "\n";
}

console.log(tableText);
var ans=$(“#我的_表”)。行;
var表格文本;
对于(变量i=0;i

是实现这些结果的一种方法,无需在后面或前面加逗号。希望以下更正有效:

var ans = $("#mytable").find("tr");
for (var i = 0; i < ans.length; i++) {
  var rows = ans[i].children;
  var rowText = "";
  for (var j = 0; j < rows.length; j++) {
    rowText += rows[j].textContent;  //.trim() if you want
    if (j < (rows.length - 1)) {
        rowText += ",";
      }
    }
  console.log(rowText);
}
var ans=$(“#mytable”).find(“tr”);
对于(变量i=0;i
我建议一种不依赖外部库的解决方案:

function tableToCSV(table) {
    var output = [], i = 0, j = 0;
    for (i = 0; i < table.rows.length; i += 1) {
        var temp = [];
        for (j = 0; j < table.rows[i].cells.length; j += 1) {
            temp.push(table.rows[i].cells[j].innerText);
        }
        output.push(temp.join(','));
    }
    return output.join('\n');
}

//to access your table use tableToCSV(document.getElementById('my_table'));
//or with jQuery tableToCSV($('#my_table')[0]);
函数表tocsv(表){
var输出=[],i=0,j=0;
对于(i=0;i

示例:

没有简单的属性,因此您必须使用某种类型的函数或对象

这是我的尝试。它比其他答案重一点,但试图根据标准(或尽可能接近CSV的标准)避开一些文本:

你可以这样使用它:

var renderer = new CSVRenderer();
var csv = renderer.render(document.getElementById("my_table"));
如果出于任何原因,每页都有多个表,则可以为每个表重用
呈现程序


上面的版本对CSV格式进行了一些基本的转义,因为它将正确处理逗号、文本换行符和引号。但是,它不会处理不均匀的行长度,并且可能有助于将

标记转换为换行符。但是对于您在这里提到的用例,它应该完成这项工作。

@Malachi do你有什么建议吗?@bloomberg,是的,我给的那一个为什么在行上使用
.textContent
?只需迭代每行的
.cells
,然后得到每个单元格的
.textContent
。不,如果我的输入是这是test post 43%,那么输出是这,是,test,post,43%,这是不正确的。我希望输出是这是testpost,43%我有限制,所以很遗憾不能使用它。:X你的限制是什么?vanilla JS是纯JS根本不使用
ans
,或者如果你这样做,只希望它是一个字符串,是完整的CSV字符串不要忘记正确地转义CSV值,否则当你的表格单元格文本中有逗号或引号时,这将失败。
function CSVRenderer() {}

CSVRenderer.prototype.escape = function (s) {
    // Escape double-quotes
    if (s.indexOf('"') !== -1) {
        s = s.replace(/"/g, '""');
    }
    // Surround text with containing, commas, or double-quotes
    if (
    s.indexOf(',') !== -1 || s.indexOf('\n') !== -1 || s.indexOf('"') !== -1) {
        s = '"' + s + '"';
    }
    return s;
};

CSVRenderer.prototype.renderCell = function (cell) {
    return this.escape(cell.textContent);
};

CSVRenderer.prototype.renderRow = function (row) {
    return Array.prototype.map.call(
        row.cells,
        this.renderCell,
        this
    ).join(',');
};

CSVRenderer.prototype.render = function (table) {
    return Array.prototype.map.call(
        table.rows,
        this.renderRow,
        this
    ).join('\n');
};
var renderer = new CSVRenderer();
var csv = renderer.render(document.getElementById("my_table"));