2015-08-11 2 views
2

Я пытаюсь получить массив массивов из таблицы ввода текста html, но когда я смотрю на массив массивов, я возвращаюсь, заполняя его пустыми строками, хотя должно быть много текста по умолчанию, и я заполнил еще несколько ячеек. Здесь вызывается javascript, за которым следует php, используемый для генерации таблицы. Когда я нажимаю кнопку, я получаюJavascript массив массивов из таблицы ввода html

«,,,,,,,,,,,,,,,,,,,,,, ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, ,,,,,,,,,,,,,,,,,,,»

<script type="text/javascript"> 
    $(document).ready(function(){ 
    $("#testButton2").click(function(){ 
     var tableInfo=document.getElementById("myTable"); 

     console.log(tableInfo); 

     var tableArray= []; 
     for (var i = 1; i < tableInfo.rows.length; i++) { 
      //var row = tableInfo.rows[i]; 
      var rowArray = []; 
      for (var j = 0; j < tableInfo.rows[i].length; j++) { 
       rowArray.push(tableInfo.rows[i].cells[j].innerHtml); 
      } 
      tableArray.push(rowArray); 
     } 
     alert(tableArray.toString()); 
    }); 
}); 
</script> 

<?php 
$table = "info.csv"; 
$id = "myTable"; 
$count = 0; 
echo "<table id=".$id.">\n\n"; 
$f = fopen($table, "r"); 
while (($line = fgetcsv($f)) !== false) { 
    echo "<tr>"; 
    foreach ($line as $cell) { 
     if ($count != 0) { 
      echo "<td><input value=" . htmlspecialchars($cell) . "></input></td>"; 
        } else { 
         echo "<td>" . htmlspecialchars($cell) . "</td>"; 
        }  
       } 
      echo "</tr>\n"; 
      $count += 1; 
     } 
     fclose($f); echo "\n</table>"; 
?> 
+0

Вы пробовали 'file_get_content()' versus 'fopen()'? Можете ли вы эхо просто «$ table» и посмотреть результаты чтения? – Twisty

+0

В JS есть '.innerHtml', который не существует, вместо этого используйте' .innerHTML'. – Teemu

+0

Извините, ваш вопрос касается JavaScript, а не кода PHP правильно? – Twisty

ответ

4

Помимо других ошибок JS tableInfo.rows[i].length всегда будет 1 ...

Используйте вместо этого: jsBin demo

$("#testButton2").click(function(){ 
    var tableInfo=document.getElementById("myTable"); 
    var tableArray= []; 

    // Start at i=0 
    for (var i = 0; i < tableInfo.rows.length; i++) { 
     var row = tableInfo.rows[i]; 
     var rowArray = []; 
     for(var j = 0; j < row.cells.length; j++) { 
      rowArray.push(row.cells[j].innerHTML); 
     } 
     tableArray.push(rowArray); 
    } 
    console.log(tableArray); 
}); 
+0

Это решило спасибо! – aaadawg

-1

похоже, вы используете JQuery, попробуйте изменить следующую строку

rowArray.push(tableInfo.rows[i].cells[j].innerHtml 

до

rowArray.push(tableInfo.rows[i].cells[j].html(); 
+0

'tableInfo.rows [i] .cells [j]' - это HTMLTDElement, он не имеет метода 'html()'. – Teemu

+0

Я изменил строку на rowArray.push (tableInfo.rows [i] .cells [j] .html()); но результат все тот же :( – aaadawg

0

jsFiddle: http://jsfiddle.net/Twisty/vdsz2gpL/

Если ваш HTML, как так:

<a href="#" id="testButton2">Run</a> 
<br /> 
<br /> 
<table id="myTable"> 
    <tr> 
     <td>Cell 1</td> 
    </tr> 
    <tr> 
     <td>Cell 2</td> 
    </tr> 
    <tr> 
     <td>Cell 3</td> 
    </tr> 
</table> 

Вы можете использовать .each() в JQuery:

$(document).ready(function() { 
    $("#testButton2").click(function() { 
     var tableArray = []; 
     var tableInfo = $("#myTable"); 
     $("#myTable tr").each(function (i, row) { 
      $(this).find("td").each(function(i, cell){ 
       tableArray.push($(cell).text()); 
      }); 
     }); 
     alert(tableArray.toString()); 
    }); 
}); 

Если вы используете JQuery, используйте все путь через.

+0

У объектов jQuery есть коллекция 'rows', в которой есть коллекция' cells'? – Teemu

+0

Это объекты DOM: http://www.w3schools.com/jsref/coll_table_rows.asp & http://www.w3schools.com/jsref/coll_table_cells.asp – Twisty

+0

Нет, они не являются, 'tableInfo' является объектом jQuery, у него нет этих коллекций. Хотя это уже не актуально, так как вы отредактировали ответ (кстати. не мой голосующий голос) – Teemu

0

Я вижу, что ответ был принят уже но вопрос в том, с меткой «jQuery», может быть интересно увидеть, насколько компактным будет решение jQuery:

$("#testButton2").click(function() { 
    var tableArray = $("#myTable tr").map(function(tr) { 
     return $("td", tr).map(function(td) { 
      return $(td).text(); 
     }).get(); 
    }).get(); 
    console.log(tableArray); 
}); 
Смежные вопросы