Javascript 存储tr';将ID和类转换为js数组并在php中读取

Javascript 存储tr';将ID和类转换为js数组并在php中读取,javascript,php,jquery,arrays,Javascript,Php,Jquery,Arrays,我有一张有一群孩子的桌子,在每个tr中我都有孩子的ID和描述他吃了什么的类,我需要当我点击一个按钮时,每行的ID和类都必须存储到js数组中,我一直在尝试用push和类似的东西存储到数组中 var array = []; $("#tbody tr").each(function() { array.push(this.id); }); 但是运气不好因为我需要两个值然后它爆炸了 这是桌子的结构 <table class="table -dark -striped" id="datata

我有一张有一群孩子的桌子,在每个tr中我都有孩子的ID和描述他吃了什么的类,我需要当我点击一个按钮时,每行的ID和类都必须存储到js数组中,我一直在尝试用push和类似的东西存储到数组中

var array = [];

$("#tbody tr").each(function() {
  array.push(this.id);
});
但是运气不好因为我需要两个值然后它爆炸了

这是桌子的结构

<table class="table -dark -striped" id="datatable"> 
 <thead> 
   <tr> 
    <th class="col -xs-9 -lg-9 -xl-9 _text-right">Nombre del Alumno</th>
      <th class="col -xs-3 -lg-3 -xl-3">Asistencia</th>
    </tr>
 </thead>
<tbody id='tbody'>                  
    <tr id="1" class="lunch"> 
       <td class="-user -detailed _text-right">Richard Mattey</td>
       <td class="_text-right">
         <div class="btn-group asistencia">
              <a class="btn -l -dark -block lunch" href="javascript:void(0)" servicio="lunch">Lunch</a>
              <a class="btn -l -dark -block vianda -success"  href="javascript:void(0)" servicio="vianda">Vianda</a>
              <a class="btn -l -dark -block inasistente" href="javascript:void(0)" servicio="inasistente"><i class="fa fa-ban"></i></a>
         </div>
      </td>                  
   </tr>

我需要的是将每个
tr
(id和class)的两个值存储到一个JS数组中,然后在单击save按钮时通过ajax发送,然后在PHP中处理它

您可以使用
querySelectorAll
迭代
tbody
中的所有
tr

然后只需从DomNode收集id和类名,如下所示:

const trs=Array.from(document.querySelectorAll('tbody>tr');
常量数据=trs.map((tr)=>({
id:tr.id,
类:tr.classList.toString()
}));
控制台日志(数据)

校友名号
亚洲
理查德·马蒂
您可以使用jQuery方法为每个
tr
元素执行一个函数,并获取id和类值:

var arr = [];

$('#tbody tr').each( function (i, tr) {

    arr.push({ 
        id: $(tr).attr('id'), 
        class: $(tr).attr('class') 
    });

});
您可以使用jQuery函数迭代所有
tr
元素并构造数组:

var arr2 = $.map( $('#tbody tr'), function (tr) {
    return {
       id: $(tr).attr('id'), 
       class: $(tr).attr('class') 
    }
});
以下是一个工作示例:

$(文档).ready(函数(){
//使用每个函数
var-arr=[];
$('#tbody tr')。每个(函数(i,tr){
arr.push({
id:$(tr.attr('id'),
类:$(tr.attr('class'))
});
});
控制台日志(arr);
//使用jquery映射函数
var arr2=$.map($('#tbody tr'),函数(tr){
返回{
id:$(tr.attr('id'),
类:$(tr.attr('class'))
}
});
控制台日志(arr2);
});

校友名号
亚洲
理查德·马蒂

您可以使用以下功能获取表中每个
tr
项的ID和类:

/* The function that fetches the data. */
function fetchData() {
   var
      /* Create an object to store the data. */
      data = {},

      /* Get every 'tr' element of the 'tbody'. */
      elements = document.querySelectorAll("#tbody > tr");

      /* For each element, save the id as a property & the class as a value in the obj. */
      [].forEach.call(elements, (element) => data[element.id] = element.className);

   /* Stringify and return the data to pass them over to the server. */
   return JSON.stringify(data);
}
上面的函数将数据作为属性值对存储在对象中,并对对象进行字符串化,以便将其传递给服务器。然后,您可以使用
foreach as
构造轻松地在PHP中访问:

示例:

foreach ($data as $id => $class) {
   # ...
}
片段:

foreach ($data as $id => $class) {
   # ...
}
/*获取数据的函数*/
函数fetchData(){
变量
/*创建一个对象来存储数据*/
数据={},
/*获取“tbody”的每个“tr”元素*/
elements=document.queryselectoral(#tbody>tr);
/*对于每个元素,将id另存为属性,将类另存为obj中的值*/
[]forEach.call(elements,(element)=>data[element.id]=element.className);
/*字符串化并返回数据以将其传递给服务器*/
返回JSON.stringify(数据);
}


获取表数据
您尝试了什么?您所说的只是一个目标,而不是实现该目标的任何代码相关问题。花点时间阅读,我为我的错误感到抱歉我刚刚编辑了它,这就像我第三次问,我已经找到了一个解决方案,你的建议银行!我不得不编辑一下!但它是有效的!:),最后是这样的:/*对于每个元素,将id保存为属性,将类保存为obj中的值。*/[].forEach.call(elements,(element)=>data[0]=element.className);[].forEach.call(elements,(element)=>data[1]=element.id);很高兴我能帮助@gamn2090。但是要小心,因为您的编辑实际上会覆盖每个循环对象的
0
1
属性。看看我的编辑,看看我的意思。但是如果我这样做的话,我得到了这个:
index:[“1”,“午餐”]
在php中,我需要访问它的每一个,如果我这样做,它就不起作用了:
If($request->ajax()){$post=$request->all();foreach($post as$key=>$value){print\r($value)}
在编辑您的问题之前,我觉得您好像想将表中所有
tr
元素的
id
传递给服务器。现在,很明显,您只需要一个按钮被单击的
tr
元素,在本例中情况完全不同。查看我编辑的答案,看看你是如何做到这一点的。不,不,你所理解的正是我想做的>。