2015-08-26 3 views
-2
$(document).ready(function() { 

function exportTableToCSV($table, filename) { 

    var $rows = $table.find('tr:has(td)'), 

     // Temporary delimiter characters unlikely to be typed by keyboard 
     // This is to avoid accidentally splitting the actual contents 
     tmpColDelim = String.fromCharCode(11), // vertical tab character 
     tmpRowDelim = String.fromCharCode(0), // null character 

     // actual delimiter characters for CSV format 
     colDelim = '","', 
     rowDelim = '"\r\n"', 

     // Grab text from table into CSV formatted string 
     csv = '"' + $rows.map(function (i, row) { 
      var $row = $(row), 
       $cols = $row.find('td'); 

      return $cols.map(function (j, col) { 
       var $col = $(col), 
        text = $col.text(); 

       return text.replace(/"/g, '""'); // escape double quotes 

      }).get().join(tmpColDelim); 

     }).get().join(tmpRowDelim) 
      .split(tmpRowDelim).join(rowDelim) 
      .split(tmpColDelim).join(colDelim) + '"', 

     // Data URI 
     csvData = 'data:application/csv;charset=utf-8,' + encodeURIComponent(csv); 

    $(this) 
     .attr({ 
     'download': filename, 
      'href': csvData, 
      'target': '_blank' 
    }); 
} 

// This must be a hyperlink 
$(".export").on('click', function (event) { 
    // CSV 
    exportTableToCSV.apply(this, [$('#dvData>table'), 'export.csv']); 

    // IF CSV, don't do event.preventDefault() or return false 
    // We actually need this to be a typical hyperlink 
}); 
}); 

Этот код превращает HTML-таблицу в файл CSV. Я не понимаю, эти две линии:Нужна помощь в понимании этого простого кода jQuery

function (i, row) { 

и

function (j, col) { 

Что 'я' и 'J'? Они не используются нигде внутри функций, и нет цикла, где используются эти переменные. Используются ли они в функции «map»?

ответ

1
function (i, row) { 

function (j, col) { 

эти строки объявления функций. Функции анонимны. i и j - это имена аргументов, переданных этим функциям. Они могут не использоваться, но все равно должны быть там как имя первого аргумента, переданного им.

См. Документацию jQuery.map для объяснения того, как вызывается обратный вызов.

+0

до сих пор не понимаю. Я удалил их из функций, но загруженный файл cvs, который я получил, был пуст. – genericMetal

+0

Добавьте строку 'console.log (i, row);' как первую строку функции. Затем смотрите в консоли и посмотрите, каковы значения этих двух аргументов. Удалите первый аргумент из объявления функции и оператора журнала и увидите разницу. – dsh

+0

, но где «i» и «j» увеличиваются? – genericMetal

0

Функция jquery map требует обратного вызова с двумя параметрами, индексом элемента и элемента. Таким образом, $ rows.map (function (i, row) {...}); получит индекс строки (0,1 ...) в первом параметре, а сама строка во втором.

Если вы удалите i из вызова функции, вы отобразите только первое значение, и вместо этого строка вместо получения значения строки получит индекс (0,1 ....)

КПП. Отображение (строка, индекс), так что неправильно отображается (check here в определении обратного вызова) Если они где независимые функции будет что-то вроде этого

void map($rows) 
{ 
    $arr = []; 
    for($i=0; $i<$rows.length; $i++) 
    { 
     $arr.push(mapping_function($i,$rows[i])); 
    } 
    return $arr; 
} 

void mapping_function($i, $row) 
{ 
    ... 
} 
+0

, но где «i» и «j», увеличиваться? – genericMetal

+0

i, j и row увеличиваются и управляются функцией отображения, карта будет вызывать эту функцию столько раз, сколько строки содержатся в переменной $ rows – zon7

+0

извините, но вы могли бы переписать ее так, чтобы функции были вне друг от друга, я не могу понять, что происходит. – genericMetal