JS中集合操作

html页面中,如果涉及到多数据的提交,利用JS中的数组对象,可以实现类似于java语言中List等集合对象的功能,这将大大增加页面于后台交互的能力。

 

Array对象有许多基础方法,例如:push(增加),join(转化为字符串、以逗号分隔),sort(排序),但是没有提供删除方法,这里需要自己实现。

 

Array.prototype.remove=function(dx)
{
    if(isNaN(dx)||dx>this.length){return false;}
    for(var i=0,n=0;i<this.length;i++)
    {
        if(this[i]!=this[dx])
        {
            this[n++]=this[i]
        }
    }
    this.length-=1
}

需要注意,每次删除完一个数组元素,数组的长度会减1.

 

var arrayObj = new Array(); //权限数组
function buildPermissionStr(obj){
 var name =obj.name;
 var mail = name.split("=")[0];
 var perm = name.split("=")[1];
 
 if(obj.checked){ 
  if(perm == 'S'){
   document.getElementById(mail).style.display="";

   //根据名称得到复选框数组,清空选择
   var arr = document.getElementsByName(mail);
   for (i=0; i<arr.length;i++) {
    arr[i].checked = false;
   }
  }
 }else{
  if(perm == 'S'){
   document.getElementById(mail).style.display="none";

   //因为上面提供的删除方法,每次删除后,数组对象长度减一,所以这里先保存数组长度,然后,根据查找得到的元素索引,删除,这样可以保证删除完整。
   var sum = arrayObj2.length;
   for(var i=0;i<sum;i++){
    var ex = isMailExist(mail);
    if(ex >-1)
     arrayObj2.remove(ex); 
   }
  }
 }

//数组添加对象时,先判断是否包含

 var exist = isExist(name);
 if(obj.checked){
  if(exist<0){ //数组不包含元素
   arrayObj.push(name);   
  }
 }else{
  if(exist>=0){ //数组包含元素
   arrayObj.remove(exist);   
  }
 }
}

 

//遍历数组,如果包含传入的字符传,返回元素索引

function isMailExist(email){
 var index ;
 if(arrayObj2.length ==0){
  return -1;
 }
 for(var i=0;i<arrayObj2.length;i++){
  if(arrayObj2[i].indexOf(email)>=0)
   return i;
 }
 
 return -1;

}

 

//遍历数组,根据字符串的值得到索引

function isExist(emailAddr){
 var index ;
 if(arrayObj.length ==0){
  return -1;
 }
 for(var i=0;i<arrayObj.length;i++){
  if(emailAddr == arrayObj[i])
   return i;
 }
 
 return -1;

}

//提交时,对于数组对象进行操作,sort为排序,join转换为字符串

function validate(obj){
 var sortArray = arrayObj.sort();
 var strArray = arrayObj2.join();
 
 for(var i=0;i<sortArray.length;i++){
  var mail =sortArray[i].split("=")[0];
  var perm = sortArray[i].split("=")[1];
  
  if(perm == 'S'){
   if(strArray.indexOf(mail)<0){
    alert(mail+"选择了发送权限,但是没有选择白名单!");
    return false;
   }
  
  }
 }
 
 var permisions = document.getElementById("${group.permisions.key}");
 var whiteListIds = document.getElementById("${group.whiteListIds.key}");
 permisions.value = arrayObj.sort().join();
 
 if(permisions.value==""){
  alert("请选择系统邮件和邮件白名单!");
  return false;
 }
 
 obj.style.display="none";
 document.getElementById("hid_sub").style.display="";
 
 return true;
}

 

最后也需要注意字符串对象的一些公共方法,indexOf(得到穿入字符串在本字符串中的开始位置),split(根据特定符号拆分),==(是否相等)。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值