js动态添加div

问题

有没有遇到过这样的需求, 在页面上会有不定个input, 点击添加按钮就添加

1559839990302

每次写这玩意好麻烦啊, 把他封装起来, 需要的时候调用就好了

思路

因为每个input标签的name如果相同的话, 在后端接收的时候会出错, 所以我的解决办法就是在name后加上一个数字, 后端用一个循环进行接收

点击第一行的添加

点击的时候, 将div准备好, 添加到内容div中的第一个

点击每行的添加

将div添加到当前点击行后面一个

点击每行删除

删除当前div

实现

基本思路很简单, 只要在每个点击按钮上添加对应的点击事件, 将结果封装成类.

我在封装的时候喜欢先想用的时候怎么用, 然后根据这个思路来想应该怎么封装, 思考如下

  1. 因为添加的div肯定是不同的, 是需要传的参数, 但是如果直接传div字符串也太丑了, 应该在页面直接写HTML, 然后传id即可
  2. 添加成功后需要有个回调函数, 我得做些收尾的工作
  3. 最好有这两个参数就可以直接运行

开始码代码了:

在创建的时候接收参数, 大部分参数都有默认值, 也就是说, 按照默认值来看, 一个参数都不需要

当前实现还很简陋, 代码放在码云上, 发现问题再更新, 下载后可以直接运行demo文件

https://gitee.com/hujingnb/addDivItem

下面是当前的简单实现, 要看最新代码请移步码云, 欢迎提出问题

/*** 用于添加条目, 不定数输入框* @param params* @constructor*/
function AddItem(params) {// 接收参数var contentDivId = params['content_div_id'] || 'content_div_id';var exampleDivId = params['example_div_id'] || 'example_div_id';var addButtonId = params['add_button_id'] || 'add_button_id';this.addButton = $('#' + addButtonId);this.contentDiv = $('#' + contentDivId);this.exampleDiv = $('#' + exampleDivId);this.addSuccessFunction = params['add_success'];this.secp = params['start_num'] || 0;this.maxNum = params['max_num'] || -1;// 保存当前已经添加的数量this.num = 0;
}// 向内容div的第一个添加
AddItem.prototype.addFistItem = function () {// 判断是否超出最大数量if(this.maxNum != -1 && this.num >= this.maxNum) return;var divItem = this.getDivItem();// 添加this.contentDiv.prepend(divItem);// 调用回调函数if (this.addSuccessFunction) this.addSuccessFunction(divItem, this.secp);// 序号迭代this.secpIter();// 条目+1this.num++;
};// 向元素后面添加
AddItem.prototype.addAfterItem = function(item) {// 判断是否超出最大数量if(this.maxNum != -1 && this.num >= this.maxNum) return;var divItem = this.getDivItem();item.after(divItem);// 调用回调函数if (this.addSuccessFunction) this.addSuccessFunction(divItem, this.secp);// 序号迭代this.secpIter();// 条目+1this.num++;
};// 获取当前序号的div
AddItem.prototype.getDivItem = function () {var cloneDiv = this.exampleDiv.clone();var secp = this.secp;// 将div的所有 input 的name加上当前序号cloneDiv.find('input').each(function () {var name = $(this).attr('name');$(this).attr('name', name + '_' + secp);});var _this = this;// 给添加按钮添加点击事件cloneDiv.find('[add]').click(function () {_this.addAfterItem(cloneDiv);});// 给删除按钮添加点击事件cloneDiv.find('[remove]').click(function () {cloneDiv.remove();// 条目-1_this.num--;});return cloneDiv;
};// 序号向后延展
AddItem.prototype.secpIter = function () {this.secp += 1;
};/*** 运行函数* @param num* 初始状态先添加几个*/
AddItem.prototype.run = function (num) {var _this = this;this.addButton.click(function () {_this.addFistItem();});// 删除示例divthis.exampleDiv.remove();// 删除div的idthis.exampleDiv.removeAttr('id');if(num){for(let i = 0; i < num; i++){this.addFistItem();}}
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/508476.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【坑】Sketch算法——Count-Min Sketch和Universal Sketch

文章目录参考链接一、Sketch算法用来做什么?二、Min-count sketch基础思想&#xff1a;进阶:特点&#xff1a;三、Universal Sketch参考链接 [1] Count-Min Sketch: https://blog.csdn.net/pipisorry/article/details/64126199 [2] Cormode G, Muthukrishnan S. An improved …

css中的单位

前端开发中, 做适配是少不了的, 这就用到了css中的各种长度单位, 做一下总结 在css中, 长度单位分为以下几种 绝对单位: px、in、cm、mm、pt、pc百分比单位: vw、vh、vmin、vmax、%相对单位: em、rem、ex、ch 各单位介绍 px 不用过多介绍, 精确像素 in 寸 cm 厘米 mm…

【5G入门】MCS调制编码方案简介

​ 目录参考资料&#xff1a;1. MCS简介MCS是什么如何选择MCS有哪些MCS可供选择如何配置MCS示例参考资料&#xff1a; 链接: 5G NR Modulation and Coding Scheme – Modulation and Code Rate. 1. MCS简介 MCS是什么 MCS&#xff08;Modulation and Coding Scheme&#xf…

caffe初体验

caffe是一个深度学习的框架, 具体我也不太清楚, 可以自行百度吧, 我也是刚刚知道有这么一个框架, 才疏学浅啊. 在安装完caffe, 我的第一个想法就是, 别管他是个啥东西, 总得先让我运行一些看一看吧. 刚好, 官方就准备了一些数据, 供我们运行一下看一看使用. 因为我是通过dock…

【安全】进阶的Mosquitto:搭建一个安全的MQTT服务

目录一、基础版Mosquitto安装及运行Mosquitto安装Mosquitto运行二、基础安全版Mosquitto安装及运行&#xff08;需要输入密码&#xff09;Mosquitto安装Mosquitto配置Mosquitto测试效果三、安全版Mosquitto安装及运行Mosquitto安装TLS安装Mosquitto配置Mosquitto测试效果注意一…

PHP注释标记整理

什么是注释标记 我们在平常写代码或看别人写的代码时, 在方法的说明注释中经常会有这样的注释: /*** param $num* return array*/上面的*param* return 就是注释标记 注释标记用于生成文档, param指明需要接收的参数, return指明返回值 在使用 phpDocumentor 等工具生成文档…

PHP 循环引用的问题

问题 为了引出问题, 先来看下面一段代码: <?php $arr [a, b,c, d, ];foreach ($arr as &$each){echo $each; } echo PHP_EOL; foreach ($arr as $each){echo $each; }这段代码很简单, 输出数组的元素两次, 感觉会输出两次 abcd? 不好意思, 输出结果如下:  是不是感…

redis常规命令记录

概述 因为redis是单线程执行&#xff0c;所以不用关心并发问题。 简单记录一下redis的操作命令&#xff0c;留作查阅&#xff0c;回头再整理一下事物等操作。 reids中存储的是kev-value形式, 其中的value有几种: 字符串: 就是简单的string 字符串列表: 有序可重的列表 字符…

代码整洁之道-函数

什么是一个好的函数或者叫方法&#xff0c;只要能让函数明确的表达其意图&#xff0c;让读者能够一眼看出是一个怎样的函数&#xff0c;其接收什么参数&#xff0c;返回什么结果&#xff0c;做了什么事情。能做到这&#xff0c;大概就能算作一个好的函数了&#xff0c;看上去很…

代码整洁之道-格式

对于代码的格式&#xff0c;每个人都有不同的代码风格&#xff0c;这没什么。但是对于一个团队来说&#xff0c;最好能够统一代码风格&#xff0c;在同一个项目中&#xff0c;如果到处充斥着不同的代码风格&#xff0c;相比读起来并不是那么让人舒适&#xff0c;比如在什么地方…

代码整洁之道-对象和数据结构

现在&#xff0c;有一个计算面积的需求&#xff0c;其中一种实现如下&#xff1a; class Square{public $side; } class Geometry{public function area($shape){if($shape instanceof Square){return $shape->side * $shape->side;}return 0;} }有人看了&#xff0c;你…

代码整洁之道-类

在面向对象的编程中&#xff0c;类是其中的基本单位&#xff0c;就像面向过程中的函数一样。所以在说类时&#xff0c;可以借鉴一下前面的函数&#xff0c;不如只做一件事&#xff0c;也就是所说的单一职责。 函数应该短小&#xff0c;对于类来说&#xff0c;也是这样。函数的…

Deepin nginx lumen配置

Deepin nginx lumen配置 正常安装 sudo apt install nginx sudo apt install php-fpm 启动后将 /etc/nginx/sites-enabled/default 配置文件 copy一份到 /etc/nginx/conf.d/lumen_demo.conf 然后按照该配置文件改改&#xff0c;修改后的配置文件如下&#xff1a; server {lis…

代码整洁之道小结

以下总结一些不好的代码规范&#xff0c; 借此警示自己不要犯这种错误 注释 1.不恰当的注释 注释应该仅用来描述有关代码和设计的技术性信息。像修改历史等信息不应出现在注释中 2.废弃的注释 过时、无关或错误的注释就是废弃的注释&#xff0c;不要写这种注释&#xff0c…

PHP的stdClass

概述 以下是百度百科对php中的 stdClass的描述&#xff1a; stdClass在PHP5才开始被流行。而stdClass也是zend的一个保留类。**stdClass类是PHP的一个内部保留类&#xff0c;初始时没有成员变量也没成员方法&#xff0c;所有的魔术方法都被设置为NULL.**凡是用new stdClass()的…

浮点数的运算精度丢失

引出 打开Python编译器&#xff0c;输入 0.10.2&#xff0c; 期待的结果是0.3&#xff0c;但是输出为&#xff1a; 0.30000000000000004 有点小尴尬&#xff0c;这是为什么呢&#xff1f; 解惑 其实这设计到了计算机的浮点数存储是以二进制进行存储的。 说二进制不太形象&a…

补码到底是个什么东西

概述 先引入一个前提&#xff0c;在计算机中数字是以二进制进行存储的&#xff0c;也就是我们看到的2&#xff0c;在计算机中存储的是10。我们进行的加法运算 213 在计算机中是这样的&#xff08;这里先假设计算机存储的是4位二进制数字&#xff09; 001000010011 很容以看的…

揭开HTTPS的神秘面纱

在说HTTP前&#xff0c;一定要先介绍一下HTTP&#xff0c;这家伙应该不用过多说明了&#xff0c;大家每天都在用&#xff0c;每一次HTTP请求&#xff0c;都是一次TCP连接。遗憾的是&#xff0c;请求的内容在TCP报文中是明文传输的&#xff0c;任何人截取到请求都可以读取其中的…

递归函数两种方式的区别

概述 递归函数都不陌生&#xff0c;比如计算n的阶乘&#xff1a; function f($n){if($n < 1) return 1;return $n * f($n-1); } 当然&#xff0c;有人可能会这么写&#xff1a; function f($n, $result){if($n < 1) return $result;return f($n-1, $n*$result); } 上…

Trie树

概述 在Google中随意搜索&#xff0c;如下所示&#xff1a; 他会自动显示相关的搜索&#xff0c;不知道有没有想过这个功能是如何实现的呢&#xff1f;面对海量的数据&#xff0c;它怎么能在我输入的同时&#xff0c;如此快速的检索到相关内容呢&#xff1f;当我查找资料后&am…