如何获取数据表数组的确切位置?

Posted

技术标签:

【中文标题】如何获取数据表数组的确切位置?【英文标题】:How to get the exact position of the array of a datatable? 【发布时间】:2021-08-20 19:33:02 【问题描述】:

我在 php + JS + SQL 中做 crud (CREATE, READ, UPDATE, DELETE) 表,我想做下一个:

我有一张用户表(我从我的数据库中获取这些数据):

当我点击“编辑”图标(绿色编辑图标)时,我可以输入表格的值。

我不知道如何获取数组的确切位置(为了显示所有这些用户,我使用的是数组,ofc)将其保存在变量中,以便稍后进行查询以更新信息。

你们知道我想说什么吗?

这是我的代码:

<table class='table table-bordered table-hover' class='display' style='width:100%; text-align: center;' id='tableTest'>
        <thead>
            <tr>
                <th>Editar</th>
                <th>Nombre</th>
                <th>Apellido 1</th>
                <th>Apellido 2</th>
                <th>Email</th>
                <th>Eliminar</th>
            </tr>
        </thead>
        <tbody>
            <?php foreach ($res_table as $r) ?>
                <tr>
                    <td><span class="fas fa-edit editar grow" onclick="updateData(this)"></span></td>
                    <td><?php echo $r->usuario?></td>
                    <td><?php echo $r->apellido1?></td>
                    <td><?php echo $r->apellido2?></td>
                    <td><?php echo $r->email?></td>
                    <td><span class="fas fa-trash-alt grow" onclick="updateData(this)"></span></td>
                </tr>
            <?php  ?>
        </tbody>
    </table>

<div id="contenedorForm">

</div>

这是我的 JS。

    // Función para actualizar los datos de la tabla.
    function updateData(nodo)          
        var nodoTd = nodo.parentNode; //Nodo TD
        var nodoTr = nodoTd.parentNode; //Nodo TR
        var nodoContenedorForm = document.getElementById('contenedorForm'); //Nodo DIV
        var nodosEnTr = nodoTr.getElementsByTagName('td');
        var editData = nodosEnTr[0].textContent;
        var usuario = nodosEnTr[1].textContent;
        var apellido1 = nodosEnTr[2].textContent;
        var apellido2 = nodosEnTr[3].textContent;
        var email = nodosEnTr[4].textContent;
        var opciones = nodosEnTr[5].textContent;
        
        var nuevoCodigohtml =
            '<td><span class="fas fa-edit editar grow" onclick="updateData(this)"></span></td>'+
            '<td><input onblur="getIdInputFromDatabase()" type="text" name="usuario" id="usuario" value="' + usuario + '" size="20"></td>'+
            '<td><input onblur="getIdInputFromDatabase()" type="text" name="apellido1" id="apellido1" value="' + apellido1 + '" size="20"></td>'+
            '<td><input onblur="getIdInputFromDatabase()" type="text" name="apellido2" id="apellido2" value="' + apellido2 + '" size="20"></td>'+
            '<td><input onblur="getIdInputFromDatabase()" type="text" name="email" id="email" value="' + email + '" size="20"></td>' + 
            '<td><span class="fas fa-trash-alt editar grow" onclick="updateData(this)"></span></td>';
        
        nodoTr.innerHTML = nuevoCodigoHtml;

        nodoContenedorForm.innerHTML =
            'Pulse Aceptar para guardar los cambios o cancelar para cancelActionlos' +
            '<form name = "formulario" action="general" method="get" onsubmit="capturarEnvio()" onreset="cancelAction()">' +
            '<input class="boton" type = "submit" value="Aceptar">' +
            '<input class="boton" type="reset" value="Cancelar">';
    

    function getIdInputFromDatabase()
        alert("I NEED TO KNOW THE POSITION OF THE ARRAY WHERE I DID ON BLUR");
    

// Data tables.
        $(function () 
            $('#tableTest').DataTable(
                "language": "url": "//cdn.datatables.net/plug-ins/1.10.20/i18n/Spanish.json",  
                "paging": true,
                "lengthChange": false,
                "searching": true,
                "ordering": true,
                "info": false,
                "autoWidth": false,
                "scrollX": false
            );
        );
</script> 

我该怎么做呢,伙计们?你能帮助我吗?我在 DataTables API 上进行了搜索,但我迷路了。 提前谢谢!

祝你有美好的一天!

【问题讨论】:

我猜你的数据库中的数据有一个主键,可能叫做id。因此,您将 id 添加到行的某处,作为 tr &lt;tr data-id='&lt;?php echo $r-&gt;id?&gt;'&gt; 的属性或隐藏的 td &lt;td style='display:none;'&gt;&lt;?php echo $r-&gt;id?&gt;&lt;/td&gt; (不要使用 style='display:none' 使用 css 隐藏它)。然后你的编辑知道哪一行正在被它的 ID 编辑(而不是行索引,它可能不匹配) 哦,是的...我有一个名为 ID 的字段!好主意!如果我想访问该 ID 以将其存储在变量中并稍后进行查询怎么办?例如,从该 ID 运行 SQL 更新语句。我怎样才能做到这一点?提前谢谢! 和你已经做的一样,如果是一列然后nodoTr[0].textContent(并调整你的其他列索引)。如果是数据属性,则为 $(nodoTr).data("id")(或 vanilla js 等效项)。 非常感谢,伙计!!!!!!我不能投票给你,因为我是 *** 的新手,但真的很感谢! 郑重声明,这种“按偏移量更新”方法一直是许多应用程序中的麻烦源。当两个或更多人在处理数据并且一个人删除一条记录时,麻烦就来了,导致另一个人的更改被应用到不正确的记录上,因为相对偏移量发生了变化。使用freedomn-m提到的记录的唯一ID是要走的路。 【参考方案1】:

由于您有一个名为 ID 的字段,因此您可以在首次构建表时将其存储在 HTML 中(在 &lt;?php foreach ($res_table as $r) ?&gt; 循环中),这可以作为 tr 的属性,例如

<tr data-id='<?php echo $r->id?>'>

或在隐藏的 td 中,例如

<td style='display:none;'><?php echo $r->id?></td>

(不要使用 style='display:none' 使用 css 来隐藏它,这里只是一个示例来显示它是隐藏的)。

那么你的编辑就可以通过ID知道哪一行正在被编辑(而不是行索引,可能与DBID不匹配)

var id = $(nodoTr).data("id")

var id = nodoTr[0].textContent;

然后,您需要将 id 传递给您的内联编辑,在某种程度上,这可以通过将作为参数添加到 onsubmit 中,例如:

'... onsubmit="capturarEnvio(' + id + ')" ...'

【讨论】:

谢谢。你是老板!

以上是关于如何获取数据表数组的确切位置?的主要内容,如果未能解决你的问题,请参考以下文章

可以使用 Android 的 FusedLocationApi 获取新数据(确切的当前位置)吗?

获取 UITableViewCell 的确切位置

如何使用python获取我们的确切位置(纬度和经度)?

获取用户输入的确切位置

获取元素位置的确切方法是啥? [复制]

在 GO 中获取嵌套的 JSON 结构数组