复制tr的一行数据或者复制数据使用,使用jq和php

news/2024/12/20 2:16:14/

效果图:

在这里插入图片描述

2.Html

<!--复制的tr数据,s----------------------------------------------------------------------------------------------->{foreach from=$arrs key=kk item=vv}
<tr><td style="text-align:center;"  >1</td><td style="text-align:center;" >2</td><td style="text-align:center;" >3</td><td style="text-align:center;"  >4</td></tr>
{/foreach}<!--定位复制要加入的位置-->
<tr class="del_rukou" id="copy_rukou" style="display: none;"></tr><!--复制的tr数据,e----------------------------------------------------------------------------------------------->

3.js

<script>//复制tr$(function () {$(".select_option").click(function (){add_tr('copy_rukou');})})function add_tr(id) {// 获取所有的tr元素// var rows = $('tr');// 创建新的tr元素var newRow = $('<tr style="height: 35px;"></tr><tr id="copy_rukou2" class="del_rukou2" style="display: none;"></tr>');//ajax获取添加的复制数据var tr_str = get_tr_fee('{$work_qid}')// 在新tr元素中添加数据newRow.html(tr_str); // 这里可以根据需要添加更多的数据// 将新的tr元素插入到指定id的tr元素之后$('#' + id ).after(newRow);//把第一个复制的定位的id删除,不然复制的数据在上面,不在下面$('.del_rukou').remove();//替换class,如果使用一样的class会都删除$(".del_rukou2").attr("id", "copy_rukou");$(".del_rukou2").attr("class", "del_rukou");//最上面的rowspan1叠加,这里是处理单元格的合并问题,可去掉var rowspan1 = $("#top_rowspan_id").attr("rowspan");rowspan1 = parseInt(rowspan1)var rowspan_new = rowspan1 + 1;$("#top_rowspan_id").attr("rowspan",rowspan_new);//文件上传的rowspan1叠加,这里是处理单元格的合并问题,可去掉var file_rowspan_val = $("#file_rowspan_id").attr("rowspan");file_rowspan_val = parseInt(file_rowspan_val)var file_rowspan_val = file_rowspan_val + 1;$("#file_rowspan_id").attr("rowspan",file_rowspan_val);}function get_tr_fee(wid) {var str = '';Ajax.call('customer_quote2worker.php?act=get_tr_fee&wid='+ wid, '', function(result){if(result.error==0){str =  result.str;}else{alert(result.message);}}, 'GET', 'JSON',false);return str;}/*function showCopyTrStr(resule){var resule_json = JSON.parse(resule);}*///删除事件function removeTr(e,wid,id){$(e).parents("tr").remove();//把合并的单元格-1//最上面的rowspan1叠加,这里是处理单元格的合并问题,可去掉var rowspan1 = $("#top_rowspan_id").attr("rowspan");rowspan1 = parseInt(rowspan1)var rowspan_new = rowspan1 - 1;$("#top_rowspan_id").attr("rowspan",rowspan_new);//文件上传的rowspan1叠加,这里是处理单元格的合并问题,可去掉var file_rowspan_val = $("#file_rowspan_id").attr("rowspan");file_rowspan_val = parseInt(file_rowspan_val)var file_rowspan_val = file_rowspan_val - 1;$("#file_rowspan_id").attr("rowspan",file_rowspan_val);//删除id数据,删除数据库的数据ajax_delete_tr(wid,id)}function ajax_delete_tr(wid,id) {Ajax.call('customer_quote2worker.php?act=ajax_delete_tr&wid='+ wid +'&id=' + id, '', function(result){if(result.error==0){}else{alert(result.message);}}, 'GET', 'JSON',false);}</script>

4.Php

elseif ($_REQUEST['act'] == 'get_tr_fee')//获取复制的tr数据,拼接到html中
{$wid        = intval($_REQUEST['wid']);$error_msg         = 'wid缺少';if(!$wid){echo json_encode(array('error'=>3,'message'=>$error_msg));exit;}$work_quote_row = db_class::getInfo($wid);//获取这个id的全部数据if(!$work_quote_row){echo json_encode(array('error'=>3,'message'=>'数据不存在'));exit;}$add_data                = [];$add_data['ref_wid']     = $wid;$add_data['add_time']    = get_todaytime();$add_data['add_user_id'] = get_admin_id_session();$add_id = db_class::add($add_data);$getCopyTrHtml = db_class::getCopyTrHtml($wid,$add_id);echo json_encode(array('error'=>0,'message'=>'','str'=>$getCopyTrHtml));exit;
}elseif ($_REQUEST['act'] == 'ajax_delete_tr')//删除复制的tr数据
{$wid        = intval($_REQUEST['wid']);$id        = intval($_REQUEST['id']);$error_msg         = 'wid缺少';if(!$wid){echo json_encode(array('error'=>3,'message'=>$error_msg));exit;}$work_quote_row = db_work_quote::getInfo($wid);$fee_row = db_work_quote_copy_fee::getInfo($id);if(!$work_quote_row){echo json_encode(array('error'=>3,'message'=>'数据不存在'));exit;}if(!$fee_row){echo json_encode(array('error'=>3,'message'=>'删除的数据不存在'));exit;}$res = db_work_quote_copy_fee::remove($id);if(!$res){echo json_encode(array('error'=>1,'message'=>'删除失败'));exit;}echo json_encode(array('error'=>0,'message'=>'','str'=>$getCopyTrHtml));exit;
}删除tr的方法,删除数据库的。看需求
5.类的方法
static function add($data)
{$res = $GLOBALS['db']->autoExecute(self::$table, $data, 'INSERT');$id  = $GLOBALS['db']->insert_id();//上面代码意思是写入数据库的数据,就是insert..return $res ? $id : false;
}/*** 获取复制的tr数据* @param $id* @return string*/static function getCopyTrHtml($wid,$id){$str = '';if(!$wid){return '';}if(!$id){return '';}$str.= '<td style="text-align:center;"  ><span><input name="name1" value="" type="text"></span>
</td>
<td style="text-align:center;" ><span><input name="name2" value="" type="text"></span>
</td>
<td style="text-align:center;" ><span><input name="name3" value="" type="text"></span></td>
<td style="text-align:center;"  ><span><input name="name4" value="" type="text"></span></td>';return $str;}这个方法,把多个td加入tr中/*** 直接删除,杀无赦* @param $id* @return bool*/
static function remove($id)
{if(!$id){return false;}$sql = "delete from " . self::$table. " WHERE id = ".$id;$res = $GLOBALS['db']->query($sql);if(!$res){return false;}return true;
}

6.注意

1.插入tr就是在数据库加入一条数据。如果想td都为空,把它删除,可以在刷新的时候,判断td是否都为空那就删除。
2.删除tr就是先删除dom节点,然后再删除数据库的数据。
3.这个操作有好的一面,就是用户在刷新后,也可以保存数据的完整性。如果使用jq复制的数据,刷新就会消失。还有降低对jq的操作复杂度,如果使用jq写也可以。
4.坏的一面就是,直接在数据库插入数据,会频繁操作数据库。对数据库不好。


http://www.ppmy.cn/news/1098965.html

相关文章

[运维|系统] go程序设置开机启动踩坑笔记

参考文献 记systemctl启动go程序 在Ubuntu上作为systemctl服务运行时Go找不到文件 go语言程序设置开机启动&#xff0c;配置不生效 需要在服务配置文件中加入工作目录配置&#xff0c;示例 WorkingDirectory/path/to/go/program/directory

P2111 考场奇遇 ( 期望dp

#include <bits/stdc.h> using namespace std; using VI vector<int>; double dp[2000010];int n,q; double a; string s; //1 表示答案一样 0表示答案不一样 //答案一样时 正确的概率为 a 不一样时正确的概率为 1 - a //第 i 个题目时&#xff0c;至少对j个题目…

C/C++之链表的建立

个人主页&#xff1a;点我进入主页 专栏分类&#xff1a;C语言初阶 C语言程序设计————KTV C语言小游戏 C语言进阶 C语言刷题 欢迎大家点赞&#xff0c;评论&#xff0c;收藏。 一起努力&#xff0c;一起奔赴大厂。 目录 1.头插 1.1简介 1.2代码实现头插 …

判断动物知识竞猜答案正误

判断动物知识竞猜答案正误 教学目标 1&#xff0e; 知识与技能&#xff1a; 结合实例&#xff0c;理解选择结构。掌握if语句的基本格式&#xff0c;掌握关系运算符。 过程与方法&#xff1a; 学会使用if编程解决实际生活中的一些问题。 情感态度与价值观&#xff1a; 教…

【实训】“宅急送”订餐管理系统(程序设计综合能力实训)

&#x1f440;樊梓慕&#xff1a;个人主页 &#x1f3a5;个人专栏&#xff1a;《C语言》《数据结构》《蓝桥杯试题》《LeetCode刷题笔记》《实训项目》 &#x1f31d;每一个不曾起舞的日子&#xff0c;都是对生命的辜负 前言 大一小学期&#xff0c;我迎来了人生中的第一次实训…

Bean 的生命周期总结

目录 一、Bean生命周期的五个阶段 Bean的初始化 二、PostConstruct 和 PreDestroy 各自的效果 三、 实例化和初始化的区别 四、为什么要先设置属性在进⾏初始化呢&#xff1f; 一、Bean生命周期的五个阶段 Java 中的公共类称之为 Bean 或 Java Bean&#xff0c;而 Spring 中的…

企业变更记录查询API:解密企业演变的关键数据

前言 随着市场竞争的不断升级和商业环境的动态变化&#xff0c;企业必须不断适应新的情况和变革。在这个过程中&#xff0c;企业的变更记录成为了关键的数据&#xff0c;它可以帮助企业了解自己的发展历程、监测竞争对手的动态、评估市场趋势和满足法律法规的合规要求。为了解…

[系统安全] 五十三.DataCon竞赛 (2)2022年DataCon涉网分析之恶意样本IOC自动化提取详解

您可能之前看到过我写的类似文章,为什么还要重复撰写呢?只是想更好地帮助初学者了解病毒逆向分析和系统安全,更加成体系且不破坏之前的系列。因此,我重新开设了这个专栏,准备系统整理和深入学习系统安全、逆向分析和恶意代码检测,“系统安全”系列文章会更加聚焦,更加系…