jquery自定义表单验证插件


Posted in Javascript onOctober 12, 2016

本文实例为大家分享了jquery表单验证插件,供大家参考,具体内容如下

//正则表达式
var map = new Map();
map.put("*", /[\w\W]+/);
map.put("*6-16", /^[\w\W]{6,16}$/);
map.put("n", /^\d+$/);
map.put("n6-16", /^\d{6,16}$/);
map.put("s", /^[\u4E00-\u9FA5\uf900-\ufa2d\w\.\s]+$/);
map.put("s6-16", /^[\u4E00-\u9FA5\uf900-\ufa2d\w\.\s]{6,16}$/);
map.put("p", /^[0-9]{6}$/);//邮编
map.put("m", /^13[0-9]{9}$|14[0-9]{9}|15[0-9]{9}$|18[0-9]{9}$/);//手机号码
map.put("e", /^\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/);//email
map.put("url", /^(http|https):\/\/(\w+:\/\/)?\w+(\.\w+)+.*$/);//url地址
map.put("image", /^(http|https):\/\/.*(.JPEG|.jpeg|.JPG|.jpg|.GIF|.gif|.BMP|.bmp|.PNG|.png)$/);//图片
map.put("integer", /^[1-9]\d*$/);//大于0的正整数
map.put("hj", /(\S*?) [^>]*>.*?<\/\1>|<.*?/);//过滤html标签和javascript标签


(function($,win){
 Validform = {
 matchReg : function(datatype){
  //匹配返回正则表达式 有3个比较特殊 所有特殊处理一下
  //这3个是因为有长度判断 要动态修改正则表达式
  var reg1 = /^\*\d{1,}-\d{1,}$/;
  var reg2 = /^n\d{1,}-\d{1,}$/;
  var reg3 = /^s\d{1,}-\d{1,}$/;
  if(reg1.test(datatype) || reg2.test(datatype) || reg3.test(datatype)){
  //把开始长度和结束长度截取出来
  var index = datatype.indexOf("-");
  var nums =new Array();
  nums[0] = datatype.substring(1,index);
  nums[1] = datatype.substring(index+1,datatype.length);
  //替换数字
  var reg;
  switch (datatype.substring(0,1)) {
  ///^[\w\W]{6,16}$/
  case "*": reg = new RegExp("^[\\w\\W]{"+nums[0]+","+nums[1]+"}$"); break;
  case "n": reg = new RegExp("^\\d{"+nums[0]+","+nums[1]+"}$"); break;
  case "s": reg = new RegExp("^[\\u4E00-\\u9FA5\\uf900-\\ufa2d\\w\\.\\s\\\\/]{"+nums[0]+","+nums[1]+"}$"); break;
  }
  return reg;
  }else{
  return map.get(datatype);
  }
 }
 }
})(jQuery,window);

 HaHaUtil = {
  checkFrom : function(formId){
  var form = $("#"+formId)[0];
  //遍历表单下面的元素
  for(var i=0;i<form.length;i++){
   if(!HaHaUtil.resultCheck(form[i])){
   return false;
   }
  }
  return true;
  },
  resultCheck : function(obj){
  var tagName = obj.tagName;
  switch(tagName)
  {
  case "INPUT": 
  case "TEXTAREA": 
   $item = $(obj);
   var dataType = $item.attr("dataType");
   //没有验证标签 就不校验了
   if(dataType == null){
   return true;
   }else{
   //获取 dataType 可以有多个验证用|分割开
   var reType = dataType.split("|");
   //把表单值前后的空格去掉
   var f_value = $item.val();
   if(f_value.indexOf(" ")!=-1){
    //说明有空格 也有可能中间有空格 中间有空格就不会去掉
    $item.val($.trim(f_value));
   }
   var tipId = $item.attr("tipId");
   $("#"+tipId).html("");

   for(var i=0;i<reType.length;i++){
    //如果第一个正则是 empty 说明是可以没值
    //如果有值 在根据正则校验
    if(reType[i] == "empty"){
    if($item.val() == ""){
     //就不校验了 
     return true;
     break;
    }else{
     //继续校验
     continue;
    }

    }
    if($("."+tipId).is(":hidden")){
    //如果是隐藏的菜单不校验
    continue;
    }
    //获取返回的正则表达式
    var reg = Validform.matchReg(reType[i]);
    if(!reg.test($item.val())){
    //判断不通过
     $("#"+tipId).html($item.attr("errormsg"));
     return false;
    break;
    }else{
     //判断通过 继续校验
     continue;
    }
   }
   return true;
   }
   break;
   //没有匹配到标签就返回false
   default : return true;
  }

  }



}


Array.prototype.remove = function(s) {
 for (var i = 0; i < this.length; i++) {
  if (s == this[i])
  this.splice(i, 1);
 }
}

function Map() {
 /** 存放键的数组(遍历用到) */
 this.keys = new Array();
 /** 存放数据 */
 this.data = new Object();

 /**
  * 放入一个键值对
  * @param {String} key
  * @param {Object} value
  */
 this.put = function(key, value) {
  if(this.data[key] == null){
  this.keys.push(key);
  }
  this.data[key] = value;
 };

 /**
  * 获取某键对应的值
  * @param {String} key
  * @return {Object} value
  */
 this.get = function(key) {
  return this.data[key];
 };

 /**
  * 删除一个键值对
  * @param {String} key
  */
 this.remove = function(key) {
  this.keys.remove(key);
  this.data[key] = null;
 };

 /**
  * 遍历Map,执行处理函数
  * 
  * @param {Function} 回调函数 function(key,value,index){..}
  */
 this.each = function(fn){
  if(typeof fn != 'function'){
  return;
  }
  var len = this.keys.length;
  for(var i=0;i<len;i++){
  var k = this.keys[i];
  fn(k,this.data[k],i);
  }
 };

 /**
  * 获取键值数组(类似Java的entrySet())
  * @return 键值对象{key,value}的数组
  */
 this.entrys = function() {
  var len = this.keys.length;
  var entrys = new Array(len);
  for (var i = 0; i < len; i++) {
  entrys[i] = {
   key : this.keys[i],
   value : this.data[i]
  };
  }
  return entrys;
 };

 /**
  * 判断Map是否为空
  */
 this.isEmpty = function() {
  return this.keys.length == 0;
 };

 /**
  * 获取键值对数量
  */
 this.size = function(){
  return this.keys.length;
 };

 /**
  * 重写toString 
  */
 this.toString = function(){
  var s = "{";
  for(var i=0;i<this.keys.length;i++,s+=','){
  var k = this.keys[i];
  s += k+"="+this.data[k];
  }
  s+="}";
  return s;
 };
}

这个是一个js插件保存.js引用就可以了,特点灵活可以自定义校验内容原理使用正则表达式,对于隐藏的表单不校验

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<%@ include file="/common/taglibs.jsp"%>
<%@page contentType="text/html;charset=UTF-8"%>
<%@page pageEncoding="UTF-8"%>

<html>
<head>
<title>新建商品</title>
<script type="text/javascript"
 src="<%=request.getContextPath()%>/static/v0/scripts/commodity/common_functions.js"></script>
<script type="text/javascript"
 src="<%=request.getContextPath()%>/static/v0/scripts/commodity/check_data.js"></script>
<script type="text/javascript"
 src="<%=request.getContextPath()%>/static/v0/scripts/commodity/commodity_create.js"></script>
<script type="text/javascript"
 src="<%=request.getContextPath()%>/static/v0/scripts/jquery/jquery.form.js"></script>
<script type="text/javascript"
 src="<%=request.getContextPath()%>/static/v0/scripts/haha.js"></script>
<script type="text/javascript"
 src="<%=request.getContextPath()%>/static/v0/scripts/haha_upload.js"></script>

<script type="text/javascript">
 j = 1; 
 $(function(){
 updateDiscountPercentage();  
 $("#btn_add2").click(function(){ 
  //var newNode='<div id="fileSelectDiv_'+j+'" class="form-inline"><div class="form-group">';
  //newNode +='<input id="detailImgFiles_'+j+'" name="detailImgFiles" type="file" /></div>';
  //newNode +='<div class="form-group"><input type="button" value="删除" onclick="delDivRow(\'fileSelectDiv_'+j+'\')"/></div><div class="form-group">';
  //newNode +='<span id="detailImgFiles_'+j+'_span" class="sr-text highlight"></span>';
  //newNode +='</div></div>';
  //$("#newUploadTd").append(newNode); 
  var newNode2='<div class="form-inline" id="newImgDiv_'+j+'"><div class="form-group">';
  newNode2+='<textarea dataType="empty|image|*1-500" tipId="detail_span" errormsg="请输入合法的图片链接,并小于500个字符" id="newDetailImgs" name="newDetailImgs" rows="1" cols="100"></textarea>';
  newNode2+='</div><div class="form-group">  ';
  newNode2+='<input type="button" id="btn_delOld2" value="删除" onclick="delDivRow(\'newImgDiv_'+j+'\')"></div></div>';
  $("#showResultTd").append(newNode2); 
  j = j + 1; 
 }); 

 $("input[name='needRobert']").click(function(){
  var need=$('input:radio[name="needRobert"]:checked').val();
  $("tr[name='Show']").toggle(); 
  /* if(need==1){
  $("tr[name='Show']").css('display','block'); 
  }else{
  $("tr[name='Show']").css('display','none'); 
  } */
 });
 });


 </script>
</head>
<body>
 <form:form method="post" action="#" id="hiddenForm" name="hiddenForm">
 <input type="hidden" name="selectedCommodityItemNo"
  id="selectedCommodityItemNo" value="" />
 <input type="hidden" name="imgFileName" id="imgFileName" value="" />
 </form:form>

 <form:form commandName="currentCommodity" name="detailDataForm"
 id="detailDataForm" method="post" enctype="multipart/form-data">

 <div id="errorMessage"
  style="color: #ff2233; font-size: 14px; text-align: center;">
  <c:if test="${not empty errorMessage }">
  <c:out value="${errorMessage }" />
  </c:if>
 </div>
 <input type="hidden" name="searchFunctionEntry"
  id="searchFunctionEntry" value="${searchFunctionEntry}" />
 <div id="content" class=" yui-g member_">
  <legend>新建商品</legend>
  <div class="h10px"></div>
  <fieldset>
  <div class="form-inline">
   <%-- <div class="form-group">
  <input type="button" name="save_btn" class="btn btn-default toTop_o_deg btn_width_1" onclick="createNewAppointment();" value='<fmt:message key="button.save"/>' id="save_btn"/>
  </div>--%>
   <div class="form-group">
   <input type="button" id="return_btn" name="return_btn"
    class="btn btn-default" value="返回列表"
    onclick="returnToSeachFunction('${searchFunctionEntry}');" />
   </div>
  </div>
  </fieldset>

  <div class="h10px"></div>
  <table border="0" width="100%">
  <tbody>

   <tr>
   <td width="20%">
    <div class="form-inline">
    <div class="form-group">
     <label for="commodityTitle" class="sr-outer">商品标题:</label>
    </div>
    </div>
   </td>
   <td width="80%">
    <div class="form-inline">
    <div class="form-group">
     <form:textarea path="title" id="title" dataType="s1-50"
     tipId="title_span" errormsg="请输入合法字符的标题,并小于50个字符" name="title"
     rows="1" cols="100" />
    </div>
    <div class="form-group">
     <span id="title_span" class="sr-text highlight">*</span>
    </div>
    </div>
   </td>
   </tr>

   <tr>
   <td width="20%">
    <div class="form-inline">
    <div class="form-group">
     <label for="keyword" class="sr-outer">关键字:</label>
    </div>
    </div>
   </td>
   <td width="80%">
    <div class="form-inline">
    <div class="form-group">
     <form:textarea dataType="empty|s1-50" tipId="keyword_span"
     errormsg="请输入合法字符的关键字,并小于50个字符" path="keyword" id="keyword"
     name="keyword" rows="1" cols="100" />
    </div>
    <div class="form-group">
     <span id="keyword_span" class="sr-text highlight"></span>
    </div>
    </div>
   </td>
   </tr>

   <tr>
   <td width="20%">
    <div class="form-inline">
    <div class="form-group">
     <label for="commodityType" class="sr-outer">商品分类:</label>
    </div>
    </div>
   </td>
   <td width="80%">
    <div class="form-inline">
    <div class="form-group">
     <form:radiobutton path="commodityType" id="commodityType"
     name="commodityType" value="0" />
     虚拟商品   
     <form:radiobutton path="commodityType" id="commodityType"
     name="commodityType" value="1" checked="true" />
     实体商品

    </div>
    <div class="form-group">
     <span id="commodityType_span" class="sr-text highlight">*</span>
    </div>
    </div>
   </td>
   </tr>

   <tr>
   <td width="20%">
    <div class="form-inline">
    <div class="form-group">
     <label for="currencyType" class="sr-outer">货币单位:</label>
    </div>
    </div>
   </td>
   <td width="80%">
    <div class="form-inline">
    <div class="form-group">
     <!-- <form:radiobutton path="currencyType" id="currencyType" name="currencyType" value="0"/>福豆    -->
     <form:radiobutton path="currencyType" id="currencyType"
     name="currencyType" value="1" checked="true" />
     福饼

    </div>
    <div class="form-group">
     <span id="commodityType_span" class="sr-text highlight">*</span>
    </div>
    </div>
   </td>
   </tr>


   <tr>
   <td width="20%">
    <div class="form-inline">
    <div class="form-group">
     <label for="pictureLink" class="sr-outer">图片链接:<span
     id="preview_myCustImage_span"></span></label>
    </div>
    </div>
   </td>
   <td width="80%">
    <div class="form-inline">
    <div class="form-group">
     <input type="file" id="myCustImage" name="myCustImage"
     size="45" />
    </div>
    <div class="form-group">
     <input type="button" value="上传图片"
     onclick="ajaxFileUpload('myCustImage','pictureLink')" />
    </div>
    <div class="form-group">
       <span id="myCustImage_span"
     class="sr-text highlight"></span>
    </div>
    </div>
    <div class="form-inline">
    <div class="form-group">
     <form:textarea dataType="image|*1-500" tipId="pictureLink_span"
     errormsg="请输入合法图片链接,并小于500个字符" path="pictureLink"
     id="pictureLink" name="pictureLink" rows="2" cols="100" />
    </div>
    <div class="form-group">
     <span id="pictureLink_span" class="sr-text highlight">*</span>
    </div>
    </div>
   </td>
   </tr>

   <tr>
   <td width="20%">
    <div class="form-inline">
    <div class="form-group">
     <label for="totalQuantity" class="sr-outer">总人次:</label>
    </div>
    </div>
   </td>
   <td width="80%">
    <div class="form-inline">
    <div class="form-group">
     <form:input dataType="integer" tipId="totalQuantity_span"
     errormsg="总人次必须为正整数" path="totalQuantity" id="totalQuantity"
     name="totalQuantity" class="form-control" type="text"
     maxlength="6" size="6" />
    </div>
    <div class="form-group">
     <span id="totalQuantity_span" class="sr-text highlight">*</span>
    </div>
    </div>

   </td>
   </tr>

   <tr>
   <td width="20%">
    <div class="form-inline">
    <div class="form-group">
     <label for="unitPrice" class="sr-outer">最低购买注数:</label>
    </div>
    </div>
   </td>
   <td width="80%">
    <div class="form-inline">
    <div class="form-group">
     <form:radiobutton path="unitPrice" id="unitPrice"
     name="unitPrice" value="1" checked="true" />
     一元   
     <form:radiobutton path="unitPrice" id="unitPrice"
     name="unitPrice" value="10" />
     十元
    </div>
    <div class="form-group">
     <span id="unitPrice_span" class="sr-text highlight">*</span>
    </div>
    </div>
   </td>
   </tr>
   <!-- 细节图 -->
   <tr>
   <td width="20%" rowspan="2">细节图: <!-- 
   <div class="form-inline">
   <div class="form-group">
    <label for="detailImgs" class="sr-outer">细节图:  <input type="button" value="全部上传" onclick="uploadDetailImgs();" /><span id="preview_detailImgs_span"></span></label>
   </div>
   </div>
   -->
   </td>
   <td width="80%" id="newUploadTd">
    <div class="form-inline">
    <div class="form-group">
     <input type="file" onchange="fileUpload_onselect(this)"
     style="display: none;" id="detailImgFiles"
     name="detailImgFiles" /> <input type="button" value="选择图片"
     onclick="document.getElementById('detailImgFiles').click();" />
    </div>
    <div class="form-group" style="margin-left: 20px">
     <input type="button" id="btn_add2" value="增加一行" />
    </div>
    <div class="form-group">
     <span id="detailImgFiles_0_span" class="sr-text highlight"></span>
    </div>
    </div>
   </td>
   </tr>
   <tr>
   <td width="80%" id="showResultTd"><c:forEach var="tmpEntity"
    items="${currentBanner.detailImages}" varStatus="status">
    <div class="form-inline" id="oldImgDiv_${tmpEntity.index}">
     <div class="form-group">
     <textarea id="oldDetailImgs" name="oldDetailImgs" rows="1"
      cols="100">${tmpEntity.url}</textarea>
     <div class="form-group">
      <input type="button" id="btn_delOld2" value="删除"
      onclick="delDivRow('oldImgDiv_${tmpEntity.index}')">
     </div>
     </div>
    </div>
    </c:forEach>
    <div class="form-inline" id="newImgDiv_0">
    <div class="form-group">
     <textarea id="newDetailImgs" dataType="empty|image|*1-500"
     tipId="detail_span" errormsg="请输入合法的图片链接,并小于500个字符"
     name="newDetailImgs" rows="1" cols="100"></textarea>
    </div>
    </div></td>
   </tr>

   <tr>
   <td> </td>
   <td><span id="detail_span" class="sr-text highlight"></span></td>
   </tr>

   <tr>
   <td width="20%">
    <div class="form-inline">
    <div class="form-group">
     <label for="tags" class="sr-outer">标签:</label>
    </div>
    </div>
   </td>
   <td width="80%">
    <div class="form-inline">
    <c:forEach var="tmpEntity" items="${allTagList}">
     <div class="form-group">
     <label><input type="checkbox" id="selectedTags"
      name="selectedTags" value="${tmpEntity.tagId}">${tmpEntity.tagName}</label>
     <input type="hidden" name="tagName_${tmpEntity.tagId}"
      id="tagName_${tmpEntity.tagId}" value="${tmpEntity.tagName}" />
     </div>
    </c:forEach>
    <div class="form-group">
     <span id="tags_span" class="sr-text highlight">*</span>
    </div>
    </div>

   </td>
   </tr>
   <tr>
   <td width="20%">
    <div class="form-inline">
    <div class="form-group">
     <label for="tags" class="sr-outer">是否需要机器人:</label>
    </div>
    </div>
   </td>
   <td width="80%">
    <div class="form-inline">
    <div class="form-group">
     <form:radiobutton path="needRobert" id="needRobert"
     name="needRobert" value="1" />
     是   
     <form:radiobutton path="needRobert" id="needRobert"
     name="needRobert" value="0" checked="true" />
     否
    </div>
    <div class="form-group">
     <span id="unitPrice_span" class="sr-text highlight">*</span>
    </div>
    </div>
   </td>
   </tr>

   <tr style="display: none;" name="Show">
   <td width="20%">
    <div class="form-inline">
    <div class="form-group">
     <label for="tags" class="sr-outer">计划售完时间:</label>
    </div>
    </div>

   </td>
   <td width="80%">
    <div class="form-inline">
    <form:input type="number" path="planSoldTime" dataType="integer" tipId="planSoldTime_"
     errormsg="必须为正整数" class="planSoldTime_" min="0" max="9999" />
    <div class="form-group">
     <span id="planSoldTime_" class="sr-text highlight">*</span>
    </div>
    </div>
   </td>
   </tr>
   <tr style="display: none;" name="Show">
   <td width="20%">
    <div class="form-inline">
     <div class="form-group">
     <label for="tags" class="sr-outer">最大购买次数:</label>
     </div>
    </div>
   </td>
   <td width="80%">
    <div class="form-inline">
    <form:input type="number" dataType="integer" tipId="regularTriggerTotalTimes_"
     errormsg="必须为正整数" class="regularTriggerTotalTimes_" path="regularTriggerTotalTimes" min="1"
     max="10" />
    <div class="form-group">
     <span id="regularTriggerTotalTimes_" class="sr-text highlight">*</span>
    </div>
    </div>
   </td>
   </tr>

   </div>

  </tbody>
  </table>

 </div>

 </form:form>
 <div class="h10px"></div>
 <div class="form-inline">
 <div class="form-group">
  <input type="button" name="save_btn" id="save_btn"
  class="btn btn-default toTop_o_deg btn_width_1"
  onclick="createNewCommodity();" value='提交并预览' />
 </div>
 </div>


</body>
</html>

这个是html的用法不用考虑其他的就是html代码

function validateForm1(){ 
 var flag=HaHaUtil.checkFrom('detailDataForm');
 return flag;
 }

这个是from表单之前的数据校验的函数。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
javaScript 关闭浏览器 (不弹出提示框)
Jan 31 Javascript
javascript 命名规则 变量命名规则
Feb 25 Javascript
javascript新建标签,判断键盘输入,以及判断焦点(示例代码)
Nov 25 Javascript
javascript 通用loading动画效果实例代码
Jan 14 Javascript
JS嵌套函数调用上下文的问题解决
Mar 26 Javascript
JS实现让访问者自助选择网页文字颜色的方法
Feb 24 Javascript
深入理解JavaScript系列(40):设计模式之组合模式详解
Mar 04 Javascript
js限制input标签中只能输入中文
Jun 26 Javascript
JS实现双击屏幕滚动效果代码
Oct 28 Javascript
详解JavaScript的表达式与运算符
Nov 30 Javascript
jQuery实现的点击图片居中放大缩小功能示例
Jan 16 jQuery
小程序页面动态配置实现方法
Feb 05 Javascript
jquery 动态增加删除行的简单实例(推荐)
Oct 12 #Javascript
老生常谈javascript的类型转换
Oct 12 #Javascript
vue制作加载更多功能的正确打开方式
Oct 12 #Javascript
将form表单通过ajax实现无刷新提交的简单实例
Oct 12 #Javascript
深入理解Node.js的HTTP模块
Oct 12 #Javascript
纯js实现手风琴效果代码
Apr 17 #Javascript
JavaScript 继承详解(六)
Oct 11 #Javascript
You might like
Laravel框架中实现使用阿里云ACE缓存服务
2015/02/10 PHP
PHP魔术方法的使用示例
2015/06/23 PHP
CI框架的安全性分析
2016/05/18 PHP
PHP实现在对象之外访问其私有属性private及保护属性protected的方法
2017/11/20 PHP
javascript call方法使用说明
2010/01/11 Javascript
jQuery总体架构的理解分析
2011/03/07 Javascript
深入理解JavaScript系列(4) 立即调用的函数表达式
2012/01/15 Javascript
jQuery同步提交示例代码
2015/12/12 Javascript
jQuery设置Cookie及删除Cookie实例分析
2016/04/15 Javascript
微信小程序 Tab页切换更新数据
2017/01/05 Javascript
Bootstrap进度条实现代码解析
2017/03/07 Javascript
Angular中实现树形结构视图实例代码
2017/05/05 Javascript
JavaScript数组去重的多种方法(四种)
2017/09/19 Javascript
Node.js安装详细步骤教程(Windows版)详解
2019/09/01 Javascript
浅谈vue限制文本框输入数字的正确姿势
2019/09/02 Javascript
Node中对非阻塞I/O、事件循环的知识点总结
2020/01/05 Javascript
JavaScript实现Tab选项卡切换
2020/02/13 Javascript
python清理子进程机制剖析
2017/11/23 Python
Numpy数组的保存与读取方法
2018/04/04 Python
python pandas生成时间列表
2019/06/29 Python
python实现连连看辅助(图像识别)
2020/03/25 Python
GDAL 矢量属性数据修改方式(python)
2020/03/10 Python
anaconda3安装及jupyter环境配置全教程
2020/08/24 Python
python如何控制进程或者线程的个数
2020/10/16 Python
基于HTML5超酷摄像头(HTML5 webcam)拍照功能实现代码
2012/12/13 HTML / CSS
美国校园市场:OCM
2017/06/08 全球购物
美国在线购买和出售礼品卡网站:EJ Gift Cards
2019/06/09 全球购物
匈牙利超级网上商店和优惠:Alza.hu
2019/12/17 全球购物
说出ArrayList,Vector, LinkedList的存储性能和特性
2015/01/04 面试题
社团活动策划书范文
2014/01/09 职场文书
《哪吒闹海》教学反思
2014/02/28 职场文书
银行服务感言
2014/03/01 职场文书
新生入学欢迎词
2015/01/26 职场文书
2015年暑假生活总结
2015/07/13 职场文书
MySQL 常见存储引擎的优劣
2021/06/02 MySQL
MongoDB安装使用并实现Python操作数据库
2021/06/28 MongoDB