Javascript

当移动滚动条时固定table的第一行和第一列,类似excel的滚动效果,jquery实现

项目中遇到个需求,就是要把table的第一行和第一列固定,这样当出现滚动条的时候就方便在滚动数据的时候可以对照title来看,而且为了美观还必须要跟excel的滚动效果一样,也就是滚动条不能只出现在table内容区域,还必须包括title区域,这样的话就不能简单的只在内容区域的div上设置overflow:auto,刚开始本想在网上搜一些现成的代码,但是很不幸没有搜到有这样的需求,大部分都是只有固定头一行或头一列,这样还好实现,但是要两个都实现就有以下复杂了。最后我还是自己来实现了。

看效果图:

页面刚初始化的table样式:

拖动滚动条后的table样式:

在线看效果

访问github上的源码

javascript之正则表达式的使用

  • 正则表达式的两种声明方法:
    • 直接变量法(建议使用)
      • 语法: /pattern/attributes
    • 创建 RegExp 对象
      • 语法:new RegExp(pattern, attributes)
  • 参数 attributes 是一个可选的字符串,包含属性 “g”、”i” 和 “m”,分别用于指定全局匹配、区分大小写的匹配和多行匹配。
    例如:
    var regExp = /(\d+)|([A-Za-z]+)/igm;
    new RegExp("(\d+)|([A-Za-z]+)", "igm");
    

RegExp 对象常用的两个方法的使用:

  • test() 方法检索字符串中的指定值。返回值是 true 或 false。
    var patt1 = new RegExp("e");//也可直接写为:var patt1 = /e/;
    var str1 = 'fdfedsfsf';
    console.log(patt1.test(str1));// true
    
  • exec() 方法检索字符串中的指定值。返回值是被找到的值。如果没有发现匹配,则返回 null
    var patt2=new RegExp("e");
    console.log(patt2.exec("The best things in life are free"));//["e", index: 2, input: "The best things in life are free"]
    

String对象会用到正则的四个方法:

  • match() 方法可在字符串内检索指定的值,或找到一个或多个正则表达式的匹配;
    返回值:存放匹配结果的数组

    var regExp1 = /(\d+)|([A-Za-z]+)/g;
    //或者:regExp1 = new RegExp('(\\d+)|([A-Za-z]+)', "g");
    var regStr1 = 'jkj12dsfs,.,fddsfFDF,.FDfsdfdsFdsfDSf¥32¥324f';
    var matchArr1 = regStr1.match(regExp1);
    console.log(matchArr1);
    
  • replace() 方法用于在字符串中用一些字符替换另一些字符,或替换一个与正则表达式匹配的子串。
    返回值:一个新的字符串

    var regExp2 = /\d+/gm;
    var regStr2 = 'fdf78767ds6f6gf87dsf67ds8f5ds7f7dsf';
    var newStr = regStr2.replace(regExp2, '');
    console.log(newStr);//fdfdsfgfdsfdsfdsfdsf
    
  • split() 方法用于把一个字符串分割成字符串数组。
    返回值:一个字符串数组

    console.log("2:3:4:5".split(":"));  //返回["2", "3", "4", "5"]
    console.log("|a|b|c".split("|"))  //返回["", "a", "b", "c"]
    
  • search() 方法用于检索字符串中指定的子字符串,或检索与正则表达式相匹配的子字符串。
    返回值:第一个与 regexp 相匹配的子串的起始位置
    说明:search() 方法不执行全局匹配,它将忽略全局标志 g。

    var str="hello World!";
    console.log(str.search(/world/i));