自己动手制作jquery插件之自动添加删除行功能介绍


Posted in Javascript onOctober 14, 2011

这是一个我认为功能基本完善的插件,它包括添加、删除、插入、上下移动、索引标识、 数量控制等功能,基本上能满足大部分多行添加的需求,当然,在完成这些功能的前提下,我也尽量保持较少的代码量和易理解的逻辑性。

     这个插件的演示页面是http://www.lovewebgames.com/demo/autoAdd/autoAdd.html ,引用自己动手制作jquery插件之自动添加删除行(上)里的介绍,这是一个简单的插件,它的作用是:一个系统中有大量的需要对一个行进行复制添加,希望能够进行批量的操作时,就可以用这个插件了。

     插件效果图如下:

 

自己动手制作jquery插件之自动添加删除行功能介绍

      在上篇里已经提到了一些制作jquery插件的基础知识,接下来就是完成这此功能了,我尽量写得吸引人眼球一点,首先,我们要完成最基础的复制行功能,很多人,都偏爱于去拼接html代码,他们觉得这个插件的入口应该是传入一段HTML代码后,你再对这个HTML进行模版复制,我不能说这种做法是错误的,因为它也确实能够完成这项工作,但是如果你要复制的行的代码比较多,又有复杂一点的控件,如存在日历或城市三级菜单等,这样你就很不易维护了,我们做前端的,就是为了让做程序的做更少的事,让用户更快捷方便的体验。所以我尽量不让程序去进行转义拼接代码,把这些工作留给JS,jquery中有个clone(bool)的方法很好用,它有一个

Boolean类型的参数,如果你要完全的复制某个dom对象,包括它上面的事件的话,就可以用clone(true)了,这样也少了再次绑定事件的困绕,所以这个插件的回调方法,其实很难用到。添加行的代码如下:
function addRow(num, isInsert, target) { 
for (var i = 0; i < num - count; i++) { 
var temp = content.find("." + settings.tempRowClass).first().clone(true); 
temp.find("input").val(""); 
temp.find("select").val("-1"); 
temp.find("textarea").val(""); 
temp.find(":checkbox").attr("checked", false); 
temp.attr("id", ""); 
temp.find("input,tr,textarea,select,:checkbox,tbody").attr("id", ""); 
if (temp.find(".richText").length > 0) { 
temp.find(".ke-container").remove(); 
} 
temp.find(".richText,input").each(function() { 
$(this).attr("id", "txt_" + Math.round(Math.random() * new Date().getTime())) 
$(this).show(); 
}); 
if (isInsert) { 
temp.insertBefore(target.closest("." + settings.tempRowClass)); 
} else { 
content.append(temp); 
} 
} 
if (num < count) { 
for (var j = count - 1; j >= num; j--) { 
delRow(content.find("."+settings.tempRowClass).eq(j)); 
} 
} else { 
if (settings.addCallBack) 
settings.addCallBack($(temp)); 
} 
count = content.find("." + settings.tempRowClass).length; 
settings.changeInput.val(count); 
sumIndex(); 
showhideBtn(); 
};

大家可能注意到,我在写这些方法的时候,都有在前面调用content然后再查找子集,这个是为了一个页面同时出现多次调用时,出现冲突的办法。

这个插件写到这就基本上算是完成了, 区区百来行代码,就完成了一个我认为不错且实用的小工具,以后调用,就只需要在html里设置相对应的class就行了,多么easy,是否也happy呢?那就不得而知,代码比较粗糙,如有高手,可以帮我改进下,欢迎大家一起探讨,自所谓送人菊花,留有余香,大家加我Q群一起学习进步吧!70210212或77813547.

Javascript 相关文章推荐
JavaScript高级程序设计 阅读笔记(十八) js跨平台的事件
Aug 14 Javascript
JavaScript常用全局属性与方法记录积累
Jul 03 Javascript
jquery实现带单选按钮的表格行选中时高亮显示
Aug 01 Javascript
js 事件截取enter按键页面提交事件示例代码
Mar 04 Javascript
javascript实现瀑布流加载图片原理
Feb 02 Javascript
jquery取消事件冒泡的三种方法(推荐)
May 28 Javascript
jQuery下拉菜单的实现代码
Nov 03 Javascript
bootstrap时间控件daterangepicker使用方法及各种小bug修复
Oct 25 Javascript
配置一个vue3.0项目的完整步骤
Apr 26 Javascript
vue-router 前端路由之路由传值的方式详解
Apr 30 Javascript
vue中使用vee-validator完成表单校验方案
Nov 01 Javascript
Vue toFixed保留两位小数的3种方式
Oct 23 Javascript
javascript nextSibling 与 getNextElement(node) 使用介绍
Oct 13 #Javascript
获取body标签的两种方法
Oct 13 #Javascript
自己动手制作jquery插件之自动添加删除行的实现
Oct 13 #Javascript
jQuery EasyUI API 中文文档 - NumberBox数字框
Oct 13 #Javascript
最短的javascript:地址栏载入脚本代码
Oct 13 #Javascript
jQuery EasyUI API 中文文档 - ComboGrid 组合表格
Oct 13 #Javascript
Javascript insertAfter() 实现函数代码
Oct 12 #Javascript
You might like
模拟xcopy的函数
2006/10/09 PHP
让你的网站首页自动选择语言转跳
2006/12/06 PHP
将FCKeditor导入PHP+SMARTY的实现方法
2015/01/15 PHP
PHP中使用Memache作为进程锁的操作类分享
2015/03/30 PHP
PHP使用DOM和simplexml读取xml文档的方法示例
2017/02/08 PHP
JavaScript asp.net 获取当前超链接中的文本
2009/04/14 Javascript
鼠标选择动态改变网页背景颜色的JS代码
2013/12/10 Javascript
jquery实现树形菜单完整代码
2015/12/29 Javascript
javascript制作照片墙及制作过程中出现的问题
2016/04/04 Javascript
Bootstrap中glyphicons-halflings-regular.woff字体报404错notfound的解决方法
2017/01/19 Javascript
angularjs之$timeout指令详解
2017/06/13 Javascript
vue cli升级webapck4总结
2018/04/04 Javascript
基于React+Redux的SSR实现方法
2018/07/03 Javascript
JS判断数组里是否有重复元素的方法小结
2019/05/21 Javascript
JS为什么说async/await是generator的语法糖详解
2019/07/11 Javascript
nodejs 递归拷贝、读取目录下所有文件和目录
2019/07/18 NodeJs
JS数组属性去重并校验重复数据
2020/01/10 Javascript
JavaScript浅层克隆与深度克隆示例详解
2020/09/01 Javascript
解决ant Design Search无法输入内容的问题
2020/10/29 Javascript
[04:31]2016国际邀请赛中国区预选赛妖精采访
2016/06/27 DOTA
python处理json数据中的中文
2014/03/06 Python
一键搞定python连接mysql驱动有关问题(windows版本)
2016/04/23 Python
PyCharm设置每行最大长度限制的方法
2019/01/16 Python
PyQt5实现简易计算器
2020/05/30 Python
用uWSGI和Nginx部署Flask项目的方法示例
2019/05/05 Python
Ubuntu+python将nii图像保存成png格式
2019/07/18 Python
Python秒算24点实现及原理详解
2019/07/29 Python
使用Python获取爱奇艺电视剧弹幕数据的示例代码
2021/01/12 Python
澳大利亚领先的在线机械五金、园艺和存储专家:Edisons
2018/03/24 全球购物
高级Java程序员面试要点
2013/08/02 面试题
汽车维修专业毕业生的求职信分享
2013/12/04 职场文书
30年同学聚会感言
2014/01/30 职场文书
见习报告的格式
2014/10/31 职场文书
有关朝花夕拾的读书笔记
2015/06/29 职场文书
Python Numpy库的超详细教程
2022/04/06 Python
Spring Cloud OAuth2实现自定义token返回格式
2022/06/25 Java/Android