如何获取表格内元素的位置(col,row)?

时间:2014-05-22 12:51:08

标签: php jquery html arrays post

我正在研究jquery来发布输入表。所有输入都需要与其索引一起发布。我猜我不能使用id或输入元素类来发布带有单元格位置信息的值。 。因为输入表是根据用户答案动态生成的。

例如;

用户为问题输入'4'值,并生成3col 4row输入表。

<table>
  <tr><td><input type="text"></td> <td><input type="text"></td> <td><input type="text"></td> 
  </tr>
  <tr><td><input type="text"></td> <td><input type="text"></td> <td><input type="text"></td> 
  </tr>
  <tr><td><input type="text"></td> <td><input type="text"></td> <td><input type="text"></td> 
  </tr>
  <tr><td><input type="text"></td> <td><input type="text"></td> <td><input type="text"></td> 
  </tr>
</table>

通过使用jquery处理程序,我可以存储值...

$(function () {
  $("input").change(function() {
    // save this.value() in an array.
    array.push(this.value());
  });
});

此刻我陷入困境,因为我必须在表中存储带有(x,y)索引的值。不久;必须将此2维表的值转换为2dim。服务器端的数据数组。

像...一样的东西。

$(function () {
  $("input").change(function() {
    array[this.col][this.row] = this.value();
  });
});

总结一下;

是否可以获取元素的位置(col,row),该元素位于表格内?

3 个答案:

答案 0 :(得分:1)

您可以使用index()方法,如下所示

$(function () {
  $("input").change(function () {
    var row = $(this).closest('tr').index(); //index of row
    var col= $(this).closest('td').index(); //index of column
    // your code
  });
});

JSFiddle Demo

答案 1 :(得分:0)

尝试这样的事情:

$(function () {
    var $rows=$('tr');/* refine if using column heading row to something like $('tr:gt(0)')*/
  $("input").change(function() {
    var $row=$(this).closest('tr');
    var rowIndex=$rows.index($row);
    var colIndex=$(this).parent().index();

      /* do something with indexes*/
  });
});

答案 2 :(得分:0)

如果你想要数组中列和行的存储值,你可以使用多维数组(数组数组)。
首先,您在默认数组中插入其他数组,这些数组会显示yuour行,然后当字段更改时,您将数据存储在数组的第一个数据中:行第二个数据列。

<script type="text/javascript">
$(document).ready(function(){
  var array=[]
  for(a=0;a<$('table tr').length;a++){
     array[a]=[] 
  } 
 $("input").change(function() {
    var val=$(this).val()
    var row=$(this).parents('tr').index()
    var column =$(this).parent('td').index()
    array[row][column] = val
    console.log(array)
  });   
})
</script>