winney

It is never too old to learn.

0%
winney

一、环境配置

node.js 官网
Git 官网

二、Hexo的安装与基本命令

安装hexo

如果没有安装hexo的,只需要在目录中单击右键启动Git Bash Here,输入命令:

1
npm install -g hexo 

初始化在本地生成Hexo相关目录

1
2
3
hexo init Note  # 初始化创建,会再桌面创建Note文件夹
cd Note # 进入Note目录
npm install # 进一步安装hexo所需文件

Hexo三连

1
2
3
hexo clean(or c)          # 清空已有hexo网站文件
hexo generate(or g) # 依据网页文本与新的CSS样式生成新网站文件
hexo server(or s) # 启动本地服务器,可以在localhost:4000查看网站修改效果

配置Git个人信息

Git 全局设置:

1
2
git config --global user.name "Github用户名"       //自己Github的账号名
git config --global user.email "Github邮箱" //自己注册Github的邮箱地址

创建 git 仓库:

1
2
3
4
5
6
7
8
mkdir test
cd test
git init
touch README.md
git add README.md
git commit -m "first commit"
git remote add origin git@gitee.com:AAAA/AAAA.git
git push -u origin master

已有仓库?

1
2
3
cd existing_git_repo
git remote add origin git@gitee.com:AAAA/AAAA.git
git push -u origin master

三、主题下载与安装

Hexo官网上提供了丰富的主题可选,你只需要打开对应的界面(https://hexo.io/themes/)选择喜欢的,然后点击名称跳转到GitHub仓库选择下载或者克隆对应的zip文件到本地,并且解压到网站目录下的themes目录即可。

然后接下来,你需要修改两个配置文件:

  • 你的网站根目录下的_config.yml文件,即网站配置文件;
  • 你选择的主题的自带配置文件_config.yml,即主题样式配置文件;
  • 生成/添加 SSH 公钥之后,测试是否连接成功:

    1
    2
    3
    4
    5
    ssh -T git@gitee.com

    如果成功,会显示:
    Hi xxx! You've successfully authenticated, but GITEE.COM does not provide shell access.

    图片路径设置

    图片路径设置

    html页面在苹果手机内,safari浏览器,微信中滑动不流畅问题解决方案

    iPhone mobile safari fixed 元素滚动慢的问题处理

    html页面在苹果手机内,safari浏览器,微信中滑动不流畅问题解决方案

    CSS控制字体自动转换成大写字母

    1
    text-transform: uppercase;

    修改滚动条样式

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    /* 滚动条样式 */
    ::-webkit-scrollbar{
    width: 2px;
    height: 5px;
    position: absolute;
    }
    ::-webkit-scrollbar-thumb{
    background-color: #fff;
    }
    ::-webkit-scrollbar-track{
    background-color: #001529;
    }
    html5 video在固定的宽度和高度内铺满

    一般是视频的缩略图或者视频需要铺满我们固定的区域。
    video : poster是缩略图

    1
    2
    3
    video{
    object-fit:fill;
    }

    https://developers.weixin.qq.com/community/develop/doc/0004403ab0c158af9f0adf1bd5b800

    https://bbs.csdn.net/topics/392450329

    https://blog.csdn.net/sepier/article/details/112780701

    隐藏video的全屏按钮
    1
    2
    3
    video::-webkit-media-controls-fullscreen-button {
    display: none;
    }
    video按全屏按钮后变形,因为只设置了宽度,要给video设置宽度和高度

    Chrome下面查看placeholder的样式

    F12——>Settings——>Preferences——>Element——>Show user agent shadow DOM(将这个勾选上)

    浏览器默认滚动条默认样式

    1. 火狐和IE浏览器不可以修改浏览器滚动条默认样式,IE浏览器可以修改滚动条颜色,但不能修改宽度

    2. 谷歌和360浏览器修改默认样式代码:

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
       /*滚动条样式*/
      ::-webkit-scrollbar {/*滚动条整体样式*/
      width: 2px; /*高宽分别对应横竖滚动条的尺寸*/
      height: 2px;
      }
      ::-webkit-scrollbar-thumb {/*滚动条里面小方块*/
      border-radius: 5px;
      box-shadow: inset 0 0 5px rgba(0,0,0,0.2);
      background: rgba(0,0,0,0.2);
      }
      ::-webkit-scrollbar-track {/*滚动条里面轨道*/
      box-shadow: inset 0 0 5px rgba(0,0,0,0);
      border-radius: 0;
      background: rgba(0,0,0,0);
      }

      // 如果只修改某个盒子的滚动条:
      .box-name::-webkit-scrollbar{}
      .box-name::-webkit-scrollbar-thumb{}
      .box-name::-webkit-scrollbar-track{}

    获取已知元素的前一个元素

    css不能实现,使用js

    1
    2
    $("已知元素").prev("需要获取的元素")
    $("#certify .swiper-slide-prev").prev(".swiper-slide")

    获取已知元素的后一个元素,使用 +

    1
    2
    3
    #certify .swiper-slide.swiper-slide-next + .swiper-slide{
    transform: translateX(-986px) scale(0.6) !important;
    }

    safari浏览器下 input/select 表单的阴影

    1
    2
    3
    4
    5
    6
    7
    input{
    -webkit-appearance: none;
    }
    加上这个,单选/复选框按钮会不显示
    select{
    -webkit-appearance: none;
    }

    iPhone Safari浏览器字体放大 ——解决方法

    1
    2
    text-size-adjust: 100%;
    -webkit-text-size-adjust: 100%;

    iPhone Safari浏览器字体放大

    去除Safari浏览器下复选框和下拉框默认样式

    1
    2
    3
    select{
    -webkit-appearance: none;
    }

    表格中内容超出指定宽度隐藏,鼠标上移,在指定宽度内换行显示。(不需要js,css的hover解决)

    需要在td里面加上span等标签来限制宽度和溢出隐藏
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    table{
    margin: 0 auto;
    width: 30%;
    border: 1px solid #666;
    text-align: center;
    border-collapse:collapse;
    }
    th{
    height:40px;
    line-height: 40px;
    }
    td{
    height: 40px;
    line-height: 40px;
    }
    tr{
    border-bottom: 1px solid #666;
    }

    td span {
    display: inline-block;
    width:160px;
    white-space: nowrap;
    text-overflow: ellipsis;
    overflow: hidden;
    vertical-align: middle;
    }
    td span:hover {
    white-space: inherit;
    text-overflow: inherit;
    overflow: visible;
    }


    <table border="1">
    <th>姓名</th>
    <th>年龄</th>
    <th>简介</th>
    <tr>
    <td>羊羊羊</td>
    <td>25</td>
    <td >
    <span>
    79942 79942 79942 79942 79942 79942 79942 79942 79942 79942 79942 79942
    </span>
    </td>
    </tr>
    </table>
    溢出隐藏:

    溢出隐藏

    鼠标上移,换行显示全部内容:

    鼠标上移,换行显示全部内容

    css3超出宽度自动换行以及超出宽度显示…

    css3超出宽度自动换行,并且首行缩进2字符

    1
    2
    3
    4
    5
    div{
    text-indent: 2em;
    word-wrap: break-word;
    word-break: break-all;
    }

    单行超出宽度显示…

    1
    2
    3
    4
    5
    div {
    text-overflow: ellipsis;
    white-space: nowrap;
    overflow: hidden;
    }

    多行超出宽度显示…以及要求显示几行或者说根据文字多少显示几行

    1
    2
    3
    4
    5
    6
    7
    div {
    overflow: hidden;
    text-overflow: ellipsis;
    display: -webkit-box;
    -webkit-line-clamp: 2; //控制显示几行
    -webkit-box-orient: vertical; //webbox方向
    }

    CSS3强制英文、中文换行与不换行 强制英文换行

    1
    2
    3
    4
    5
    1. word-break:break-all;只对英文起作用,以字母作为换行依据
    2. word-wrap:break-word; 只对英文起作用,以单词作为换行依据
    3. white-space:pre-wrap; 只对中文起作用,强制换行
    4. white-space:nowrap; 强制不换行,都起作用
    5. white-space:nowrap; overflow:hidden; text-overflow:ellipsis;不换行,超出部分隐藏且以省略号形式出现(部分浏览器支持)

    input输入框禁止显示历史记录

    在输入input时会提示原来输入过的内容,还会出现下拉的历史记录,禁止这种情况(关闭自动提示),只需在input中加入:
    autocomplete=”off”

    1
    <input type="text"  autocomplete="off" />

    如果所有表单元素都不想使用自动提示功能,只需在表单form上设置autocomplete=off:

    1
    2
    3
    4
    <form autocomplete="off"> 
    <input type="text" name="name">
    <input type="text" name="password">
    </form>

    参考博客

    【解决方案】去掉谷歌浏览器获取焦点时默认的input、textarea的边框和背景

    1、使用Chrome的都知道,当鼠标焦点在input\textarea这些元素上时,Chrome默认的会给它们加上黄色的边框。 可以使用下面的css代码去掉所有元素的边框:

    1
    *:focus{outline:none;}

    2、Chrome默认用户可以控制textarea的大小,在CSS中加入下面一句就可以了:

    1
    textarea {resize:none;}

    浏览器记住密码的情况下,解决密码输入框自动填充密码框(input type=”password” 的问题)

    1
    2
    3
    用户名:<input type='text' autocomplete='off'>
    密码:<input type='password' autocomplete="new-password" style="background-color: #fff!important;" readonly onfocus="this.removeAttribute('readonly');" onblur="this.setAttribute('readonly',true);">

    解决html页面英文和数字不自动换行,但中文就可以自动换行

    处理换行

    解决方法:添加css属性word-break: break-all;

    word-break: break-all

    溢出的文字隐藏

    1
    2
    3
    white-space: nowrap;
    text-overflow: ellipsis;
    overflow: hidden;

    溢出文字省略号显示

    1
    2
    3
    4
    5
    6
    7
    .content{
    /* display:block; */
    width:200px;
    overflow: hidden;
    white-space: nowrap;
    text-overflow: ellipsis;
    }

    注:如果是表格元素,需要加上display:block;

    处理IE浏览器:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    (function($) { 
    $.fn.ellipsis = function(enableUpdating){
    var s = document.documentElement.style;
    if (!('textOverflow' in s || 'OTextOverflow' in s)) {
    return this.each(function(){
    var el = $(this);
    if(el.css("overflow") == "hidden"){
    var originalText = el.html();
    var w = el.width();

    var t = $(this.cloneNode(true)).hide().css({
    'position': 'absolute',
    'width': 'auto',
    'overflow': 'visible',
    'max-width': 'inherit'
    });
    el.after(t);

    var text = originalText;
    while(text.length > 0 && t.width() > el.width()){
    text = text.substr(0, text.length - 1);
    t.html(text + "...");
    }
    el.html(t.html());

    t.remove();

    if(enableUpdating == true){
    var oldW = el.width();
    setInterval(function(){
    if(el.width() != oldW){
    oldW = el.width();
    el.html(originalText);
    el.ellipsis();
    }
    }, 200);
    }
    }
    });
    } else return this;
    };
    })(jQuery);

    要调整placeholder属性的样式,如果在谷歌浏览器下审核不了placeholder

    解决方法:

    1. F12,打开控制台
    2. 在控制台右上角,选择三个点(更多选项图标),选择“Settings”
    3. 将Show user agent shadow DOM勾选上

    文本域(textarea)的提示文字(placeholder)换行显示

    1
    2
    3
    // 在需要换行的地方加上&#13;&#10;

    placeholder="请输入微信APP支付参数,便于技术查看,涉及字段如下:&#13;&#10;微信支付商户号:&#13;&#10;商户Key:&#13;&#10;微信AppID:&#13;&#10;AppSecret:"

    修改placeholder样式

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    ::-webkit-input-placeholder { /* Chrome/Opera/Safari */ 
    color: #ccc;
    }
    ::-moz-placeholder { /* Firefox 19+ */
    color: #ccc;
    }
    :-ms-input-placeholder { /* IE 10+ */
    color: #ccc;
    }
    :-moz-placeholder { /* Firefox 18- */
    color: #ccc;
    }

    textarea元素的placeholder属性不显示

    textarea的placeholder属性值不显示的原因可能是<textarea></textarea>之间存在空格或者换行

    placeholder兼容浏览器的解决方案

    关于placeholder的使用,众所周知它是h5的新属性,所以IE9以下就别想用它了,不支持。 那么我们必须要低版本的浏览器,做一些降级处理的兼容,原理自然就是:提示语placeholder用其他方式替代显示咯。 以下是一小段兼容处理。

    代码如下:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    <!DOCTYPE html>
    <html lang="en">
    <head>
    <meta charset="UTF-8">
    <title>welcome to ixiewei world</title>
    <style type="text/css">
    body{font:12px/1.5 "\5FAE\8F6F\96C5\9ED1","\9ED1\4F53",Helvetica,Tahoma,arial,sans-serif; margin:0 auto; color:#333;}
    p,ul,ol,dl,dt,dd,h1,h2,h3,h4,h5,h6,form,input,select,button,textarea,iframe{margin:0; padding:0;}
    .clearfix:after{content:".";display:block;height:0;clear: both;visibility:hidden;}
    .clearfix{*zoom:1;}
    .fl{ float:left;_display: inline}
    .pr{ position:relative}
    .abs{position:absolute;}

    /*placeholder字体颜色*/
    ::-webkit-input-placeholder { /* WebKit browsers */
    color: #ccc;
    }
    :-moz-placeholder { /* Mozilla Firefox 4 to 18 */
    color: #ccc;
    }
    ::-moz-placeholder { /* Mozilla Firefox 19+ */
    color: #ccc;opacity:1
    }
    :-ms-input-placeholder { /* Internet Explorer 10+ */
    color: #ccc !important;
    }
    input:-webkit-autofill { /* 谷歌浏览器-文本框边框阴影遮住了背景颜色浅黄*/
    -webkit-box-shadow: 0 0 0 1000px #ffffff inset !important;
    }
    .demod{width:440px;height:auto;background:#ffffff;padding-top:35px;position:relative;font-family:microsoft yahei}
    .demod .demodin{height:40px;margin:0 37px 20px;border:1px solid #d2d6e0}
    .demod .demodin .input_d{height:30px;margin:5px 0 0 0}
    .demod .demodin .input_d input{height:30px;line-height:30px;width:280px;border:0;font-size:14px;font-family:microsoft yahei;color:#333;outline: none}
    .demod .demodin .input_d label{height:30px;line-height:30px;width:280px;border:0;font-size:14px;font-family:microsoft yahei;color:#ccc;top:0;left:0;display:none}
    .demod{width:440px;height:auto;background:#ffffff;position:relative;font-family:microsoft yahei}
    .demod .demodin{height:40px;margin:0 37px 20px;border:1px solid #d2d6e0}
    .demod .demodin p{height:16px;width:34px;border-right:1px solid #ddd;margin:13px 12px 0 0}
    .demod .demodin .input_d{height:30px;margin:5px 0 0 0}
    .demod .demodin .input_d input{height:30px;line-height:30px;width:280px;border:0;font-size:14px;font-family:microsoft yahei;color:#333;outline: none}
    .demod .demodin .input_d label{height:30px;line-height:30px;width:280px;border:0;font-size:14px;font-family:microsoft yahei;color:#ccc;top:0;left:0;display:none}
    .demod .demodin .input_d_pwd input{width:240px}
    .demod .demodin .see_pwd_btn{display:block;top:10px;right:10px;cursor:pointer;height:22px}
    .demod .demodin .see_pwd_on{color:#00AA00}
    </style>
    </head>
    <body>
    <!--demo示例-->
    <div>
    <div class="demod">
    <div class="demodin clearfix pr">
    <div class="input_d fl">
    <input type="text" placeholder="请输入手机号" autocomplete="off"/>
    </div>
    </div>
    <div class="demodin clearfix pr">
    <div class="input_d fl pr">
    <label class="abs"></label>
    <input type="password" placeholder="请输入密码" autocomplete="new-password"/>
    </div>
    </div>
    <div class="demodin clearfix pr">
    <div class="input_d input_d_pwd fl pr">
    <label class="abs"></label>
    <input type="password" placeholder="请输入密码2" autocomplete="new-password" class="ch_reg_pwd"/>
    </div>
    <div class="see_pwd_btn abs">查看密码</div>
    </div>
    </div>
    </div>
    <script type="text/javascript" src="/js/jquery-1.7.2.min.js"></script>
    <script type="text/javascript">
    $(function () {
    //兼容不支持placeholder的浏览器[ie浏览器,并且10以下均采用替代方式处理]
    if ((navigator.appName == "Microsoft Internet Explorer") && (document.documentMode < 10 || document.documentMode == undefined)) {
    var $placeholder = $("input[placeholder]");
    for (var i = 0; i < $placeholder.length; i++) {
    if ($placeholder.eq(i).attr("type") == "password") {
    $placeholder.eq(i).siblings("label").text($placeholder.eq(i).attr("placeholder")).show()
    } else {
    $placeholder.eq(i).val($placeholder.eq(i).attr("placeholder")).css({"color": "#ccc"})
    }
    }
    $placeholder.focus(function () {
    if ($(this).attr("type") == "password") {
    $(this).siblings("label").hide()
    } else {
    if ($(this).val() == $(this).attr("placeholder")) {
    $(this).val("").css({"color": "#333"})
    }
    }
    }).blur(function () {
    if ($(this).attr("type") == "password") {
    if ($(this).val() == "") {
    $(this).siblings("label").text($(this).attr("placeholder")).show()
    }
    } else {
    if ($(this).val() == "") {
    $(this).val($(this).attr("placeholder")).css({"color": "#ccc"})
    }
    }
    });
    $(".clone_input_text").live("focus", function () {
    $(this).siblings("label").hide()
    }).live("blur", function () {
    if ($(this).val() == "") {
    $(this).siblings("label").text($(this).attr("placeholder")).show()
    }
    });
    $placeholder.siblings("label").click(function () {
    if ($(this).parent("div").siblings(".see_pwd_btn").attr("data-flag") == "1") {
    $(this).hide().next("input").next("input").focus()
    } else {
    $(this).hide().next("input").focus()
    }
    })
    }

    //可视密码
    $(".see_pwd_btn").click(function() {
    var obj=$(this);
    var ch_reg_pwd = $(".ch_reg_pwd");
    if (obj.attr("data-flag") != 1) {
    var clone_input = '<input type="text" class="clone_input_text" placeholder="'+ ch_reg_pwd.attr("placeholder") + '" value="' + ch_reg_pwd.val() + '"/>';
    ch_reg_pwd.after(clone_input);
    ch_reg_pwd.hide();
    obj.addClass("see_pwd_on").attr("data-flag", 1);
    } else {
    ch_reg_pwd.val($(".clone_input_text").val()).show();
    $(".clone_input_text").remove();
    obj.removeClass("see_pwd_on").attr("data-flag", "");
    }
    });
    });
    </script>
    </body>
    </html>
    HTML5 INPUT placeholder及兼容性处理
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    HTML5对Web Form做了许多增强,比如input新增的type类型、Form Validation等。Placeholder是HTML5新增的另一个属性,当input或者textarea设置了该属性后,该值的内容将作为灰字提示显示在文本框中,当文本框获得焦点时,提示文字消失。以前要实现这效果都是用JavaScript来控制才能实现: 
    请输入文字
    由于placeholder是个新增属性,目前只有少数浏览器支持,如何检测浏览器是否支持它呢?(更多HTML5/CSS3特性检测可以访问)

    function hasPlaceholderSupport() {
    return 'placeholder' in document.createElement('input');
    }

    默认提示文字是灰色的,可以通过CSS来改变文字样式:


    /* all */
    ::-webkit-input-placeholder { color:#f00; }
    input:-moz-placeholder { color:#f00; }

    /* individual: webkit */
    #field2::-webkit-input-placeholder { color:#00f; }
    #field3::-webkit-input-placeholder { color:#090; background:lightgreen; text-transform:uppercase; }
    #field4::-webkit-input-placeholder { font-style:italic; text-decoration:overline; letter-spacing:3px; color:#999; }

    /* individual: mozilla */
    #field2:-moz-placeholder { color:#00f; }
    #field3:-moz-placeholder { color:#090; background:lightgreen; text-transform:uppercase; }
    #field4:-moz-placeholder { font-style:italic; text-decoration:overline; letter-spacing:3px; color:#999; }


    兼容其他不支持placeholder的浏览器:

    var PlaceHolder = {
    _support: (function() {
    return 'placeholder' in document.createElement('input');
    })(),

    //提示文字的样式,需要在页面中其他位置定义
    className: 'abc',

    init: function() {
    if (!PlaceHolder._support) {
    //未对textarea处理,需要的自己加上
    var inputs = document.getElementsByTagName('input');
    PlaceHolder.create(inputs);
    }
    },

    create: function(inputs) {
    var input;
    if (!inputs.length) {
    inputs = [inputs];
    }
    for (var i = 0, length = inputs.length; i <length; i++) {
    input = inputs[i];
    if (!PlaceHolder._support && input.attributes && input.attributes.placeholder) {
    PlaceHolder._setValue(input);
    input.addEventListener('focus', function(e) {
    if (this.value === this.attributes.placeholder.nodeValue) {
    this.value = '';
    this.className = '';
    }
    }, false);
    input.addEventListener('blur', function(e) {
    if (this.value === '') {
    PlaceHolder._setValue(this);
    }
    }, false);
    }
    }
    },

    _setValue: function(input) {
    input.value = input.attributes.placeholder.nodeValue;
    input.className = PlaceHolder.className;
    }
    };

    //页面初始化时对所有input做初始化
    //PlaceHolder.init();
    //或者单独设置某个元素
    //PlaceHolder.create(document.getElementById('t1'));

    关于input标签和placeholder在IE8,9下的兼容问题

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    一、input常用在表单的输入,包括text,password,H5后又新增了许多type属性值,如url, email, member等等,考虑到非现代浏览器的兼容性问题,这些新的type常用在移动端的项目中。

    二、IE10+浏览器下,input标签会有一个默认的样式,比如文本框的‘×’号,密码框的小眼睛。初衷是好的,有时候很方便,但有时候我们会自己设置样式和功能。可以用伪元素方法去除:

    ::-ms-clear, ::-ms-reveal{display: none;}

    三、在低版本的IE下,input中的文字位置会改变(偏上显示),解决方法:(思路: 设置input的高度=行高)


    input {
    height: 60px;
    line-height: 60px;
    margin: 0;
    padding: 0;
    outline: none;
    }

    四、实际中,我们会在input的前面用label标签或其他,提示input的内容信息。在IE下,在获得焦点、失去焦点时,label标签里的文字会出现抖动问题。解决方法:(设置input的显示方式为行内块)

    input {
    display: inline-block;
    }

    五、##placeholder是H5的一个新属性,但是在IE9以下是不支持的,为此我们会封装一个函数进行能力检测。 
    参考地址:http://www.studyofnet.com/news/1022.html
    ###以下是代码部分:

    1 $(function() {
    2 // 如果不支持placeholder,用jQuery来完成
    3 if(!isSupportPlaceholder()) {
    4 // 遍历所有input对象, 除了密码框
    5 $('input').not("input[type='password']").each(
    6 function() {
    7 var self = $(this);
    8 var val = self.attr("placeholder");
    9 input(self, val);
    10 }
    11 );
    12
    13 /**
    14 * 对password框的特殊处理
    15 * 1.创建一个text框
    16 * 2.获取焦点和失去焦点的时候切换
    17 */
    18 $('input[type="password"]').each(
    19 function() {
    20 var pwdField = $(this);
    21 var pwdVal = pwdField.attr('placeholder');
    22 var pwdId = pwdField.attr('id');
    23 // 重命名该input的id为原id后跟1
    24 pwdField.after('<input id="' + pwdId +'1" type="text" value='+pwdVal+' autocomplete="off" />');
    25 var pwdPlaceholder = $('#' + pwdId + '1');
    26 pwdPlaceholder.show();
    27 pwdField.hide();
    28
    29 pwdPlaceholder.focus(function(){
    30 pwdPlaceholder.hide();
    31 pwdField.show();
    32 pwdField.focus();
    33 });
    34
    35 pwdField.blur(function(){
    36 if(pwdField.val() == '') {
    37 pwdPlaceholder.show();
    38 pwdField.hide();
    39 }
    40 });
    41 }
    42 );
    43 }
    44 });
    45
    46 // 判断浏览器是否支持placeholder属性
    47 function isSupportPlaceholder() {
    48 var input = document.createElement('input');
    49 return 'placeholder' in input;
    50 }
    51
    52 // jQuery替换placeholder的处理
    53 function input(obj, val) {
    54 var $input = obj;
    55 var val = val;
    56 $input.attr({value:val});
    57 $input.focus(function() {
    58 if ($input.val() == val) {
    59 $(this).attr({value:""});
    60 }
    61 }).blur(function() {
    62 if ($input.val() == "") {
    63 $(this).attr({value:val});
    64 }
    65 });
    66 }

    头部和底部固定定位,中间内容区滚动展示

    1
    2
    3
    4
    5
    6
    <header class="head">顶部固定区域</header>

    <article class="main" id="wrapper">
    </article>

    <footer class="foot">底部固定区域</footer>
    1
    2
    3
    4
    5
    6
    7
    .head,.foot{position:fixed;left:0;height:38px;line-height:38px;width:100%;background-color:#999;}

    .head{top:0;}

    .foot{bottom:0;}

    .main{position:fixed;top:38px;bottom:38px;width:100%;overflow:scroll;background-color:#f2f2f2;}

    出现浮层时,禁止页面滚动

    当浮层出现的时候∶

    1
    $('htm1').addc1ass("noscro1l');

    当浮层隐藏的时候︰

    1
    $('htm1').removec1ass("noscro1l');

    可以让一部分浏览器的窗体不能滚动,但不包括Safari等浏览器,怎么办呢?

    我们可以在浮层touchmove的时候,阻止默认事件达到避免滚动的问题,例如︰

    1
    2
    3
    $('aside').on('touchmove', function(event){
    event.preventDefault();
    });

    这种处理兼容性强,效果最好,但是有一个问题,就是如果浮层自己也有滚动,那么这种处理会让浮层里面自己的滚动行为也无法触发,因此,我们的处理要更进一步,如下:

    1. 当手指touchstart的元素不是滚动容器同时不失容器的子元素的时候,阻止默认行为;
    2. 如果手指touchstart的元素是滚动容器或者容器子元素的时候,不阻止默认行为,但不包括滚动到容器边缘的时候。

    根据上述原理,我自己抽象了一个简单的方法,方法名和语法如下,完整代码见这里:

    1
    $.smartscro11(container, selectorscro11able);

    选择倒数第n个元素

    css3 :nth-last-child()选择器

    规定属于其父元素的第二个子元素的每个p元素,从最后一个子元素开始计数∶

    1
    2
    3
    p:nth-last-child(2) {
    background: #fff;
    }

    Chrome提示框(弹窗)字体模糊

    白己写的一个很简单的提示框弹窗,firefox , Safari , ie都清晰,但是chrome就惑觉很模糊

    导致模糊的原因:在提示框样式中使用了transform、z-index样式有可能导致这个问题

    例如: transform: translate(-50%, -50%); //让提示框垂直居中和水平居中

    解决办法:弹窗提示框不使用transform来做垂直居中水平居中。

    1,如果弹窗是大小固定的,可以使用:left:50%;top:50%; margin-left:-(弹窗宽度/2)px; margin-top:-(弹窗高度/2)px;

    2,如果弹窗大小不固定;可以使用js获取弹窗高度和高度,然后按照1方法中的方式,让盒子居中

    取消a标签在移动端点击时的蓝色:

    1
    2
    3
    4
    -webkit-tap-highlight-color: rgba(255,255,255, 0);
    -webkit-user-select: none;
    -moz-user-focus: none;
    -moz-user-select: none;

    使用图片作为a标签的点击按钮时,当触发touchstart的时候,往往会有一个灰色的背景︰

    1
    2
    3
    4
    5
    6
    7
    a,a:hover,a:active,a:visited,a:link,a:focus{
    -webkit-tap-highlight-color:rgba(0,0,0,0);
    -webkit-tap-highlight-color: transparent;
    outline:none;
    background: none;
    text-decoration: none;
    }

    改变选中内容的背景颜色

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    ::selection {
    background: #FFF;
    color: #333;
    }
    ::-moz-selection {
    background: #FFF;
    color: #333;
    )
    ::-webkit-selection {
    background:#FFF;
    color: #333;
    }

    input 消除自动记忆功能 关闭浏览器自动填充输入框

    input 的autocomplete属性默认是on:其含义代表是否让浏览器自动记录之前输入的值

    1
    autocomplete="off"

    去除ios input框点击时的灰色背景︰

    1
    -webkit-tap-highlight-color:rgba(0,0,0,0);

    区分标准模式下ie6~ie9和Firefox/Chrome的hack:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    background-color:orange;       //all - for Firefox/Chrome
    background-color:red\0; //ie 8/9/10/Opera - for ie8/ie10/Opera
    background-color:blue\9\0; //ie 9/10 - for ie9/10
    *background-color:black; //ie 6/7 -for ie7
    _background-color:green; //ie6 - for ie6

    IE6显示为:绿色,
    IE7显示为:黑色,
    IE8显示为:红色,
    IE9显示为:蓝色,
    Firefox/Chrome显示为:橘色
    (本例IE10效果同IE9,Opera最新版效果同IE8)

    自定义滚动条样式,兼容IE浏览器

    Chrome浏览器滚动条自定义样式修改
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    div{
    /*滚动条滑块按钮的颜色*/
    scrollbar-face-color: #134187;
    /*滚动条整体颜色*/
    scrollbar-highlight-color: #134187;
    /*滚动条轨道颜色*/
    scrollbar-track-color: #011433;
    }
    /*滚动条整体部分,必须要设置*/
    ::-webkit-scrollbar{
    background-color: #011433;
    width:10px;
    height:10px;
    }
    /*滚动条的轨道*/
    ::-webkit-scrollbar-track{
    background-color: #011433;
    border-radius: 10px;
    }
    /*滚动条的滑块按钮*/
    ::-webkit-scrollbar-thumb{
    border-radius: 10px;
    background-color: #134087;
    }

    IE浏览器滚动条自定义样式修改

    在写样式之前,我们看一下IE浏览器滚动条样式设置位置参考图:

    IE浏览器滚动条样式设置位置参考图

    滚动条样式 支持情况 支持浏览器版本 可否继承 描述
    scrollbar-3dlight-color IE特有属性 IE5.5+ y 设置滚动框的和滚动条箭头左上边缘的颜色
    scrollbar-highlight-color IE特有属性 IE5.5+ y 设置滚动框的和滚动条箭头左上边缘的颜色
    scrollbar-face-color IE特有属性 IE5.5+ y 设置滚动框和滚动条箭头的颜色
    scrollbar-arrow-color IE特有属性 IE5.5+ y 设置i滚动条箭头的颜色
    scrollbar-shadow-color IE特有属性 IE5.5+ y 设置滚动框的和滚动条箭头右下边缘的颜色
    scrollbar-dark-shadow-color IE特有属性 IE5.5+ y 设置滚动条槽的颜色
    scrollbar-base-color IE特有属性 IE5.5+ y 设置滚动条主要构成部分的颜色
    scrollbar-track-color IE特有属性 IE5.5+ y 设置滚动条轨迹组成部分的颜色
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    //IE下滚动条样式
    HTML {
    scrollbar-base-color: #134087;
    //scrollbar-base-color: #134087;
    scrollbar-3dlight-color:#134087;
    scrollbar-highlight-color: #134087;
    scrollbar-track-color: #011433;
    scrollbar-arrow-color: #011433;
    scrollbar-shadow-color:#011433;
    //scrollbar-dark-shadow-color: #011433;
    }

    摘抄自:https://blog.csdn.net/qq_36727756/article/details/92795170

    下划线css偏移量

    用CSS下划线距离

    代码一:

    1
    2
    3
    4
    5
    6
    a {
    text-decoration: none;
    background: url(underline.gif) repeat-x 100% 100%;
    padding-bottom: 4px;
    white-space: nowrap;
    }

    代码二:

    1
    2
    3
    4
    5
    6
    7
    a { 
    text-decoration: none;
    padding:0 0 6 0;
    border-bottom-color:0;
    border-bottom-width:1px;
    border-bottom-style:solid;
    }

    代码三:

    1
    2
    3
    4
    5
    6
    a{  
    text-decoration:none;
    border-bottom:1px solid #ccc; /* #ccc换成链接的颜色 */
    display: inline-block;
    padding-bottom:10px; /*这里设置你要空的距离*/
    }

    解决IE阴影兼容性

    ie-css3.htc CSS3PIe

    IE样式的兼容写法

    1
    2
    3
    4
    5
    .example{
    color:#fff;//FF,OP,IE8
    *color:#ff0;//IE7
    _color:#f00;//IE6
    }

    元素在盒子中水平居中+垂直居中

    参考文章

    1
    2
    3
    display: flex;//flex布局
    justify-content: center;//使子项目水平居中
    align-items: center;//使子项目垂直居中

    参考教程

    KindEditor在移动端默认显示源码模式

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    var editor;
    KindEditor.ready(function(K) {
    editor = K.create('textarea[name="content"]', {
    resizeType : 1,
    allowPreviewEmoticons : false,
    allowImageUpload : false,
    items : [
    'source', 'fontsize', '|', 'forecolor', 'hilitecolor', 'bold', 'italic', 'underline',
    'removeformat', '|', 'justifyleft', 'justifycenter', 'justifyright', 'insertorderedlist',
    'insertunorderedlist', '|', 'link']
    });

    // 安卓手机兼容性处理(KindEditor在移动端默认显示源码模式)
    var u = navigator.userAgent;
    var isAndroid = u.indexOf('Android') > -1 || u.indexOf('Adr') > -1;
    if(isAndroid) {
    $(".ke-outline[data-name='source']").click();
    }

    });

    但如果想要对IE8单独定义样式,可以这样:
    html*~body .example{这里是针对IE8识别的样式}

    针对IE9的CSS只需在相应CSS代码加入只有IE9识别的 \9\0。具体代码如下:

    1
    .div{ background-color:#0f0\9\0;/* ie9 */ }

    其他浏览器写法:

    1
    2
    3
    4
    5
    6
    7
    background-color:#f00;/*all*/
    background-color:#0ff\0;/* ie 8/9 */
    background-color:#0f0\9\0;/* ie9 */
    *background-color:#00f;/*ie7*/
    _background-color:#ff0;/*ie6*/
    background-color//:#090;/*非IE*/
    background-color:#900\9;/*所有ie*/

    怎么规定CSS的属性仅在IE下生效?在非IE浏览器下不生效

    1
    2
    3
    4
    5
    <!--[if IE]>
    <style>
    .test{color:red;}
    </style>
    <![endif]-->

    css中判断IE版本的语句

    Koala设置scss编译后的输出路径

    IE兼容性处理

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    <!--[if !IE]> 除IE外都可识别 <!--<![endif]-->

    <!--[if IE]> 所有的IE可识别 <![endif]-->

    <!--[if IE 5.0]> 只有IE5.0可以识别 <![endif]-->

    <!--[if IE 5]> 仅IE5.0与IE5.5可以识别 <![endif]-->

    <!--[if gt IE 5.0]> IE5.0以及IE5.0以上版本都可以识别 <![endif]-->

    <!--[if IE 6]> 仅IE6可识别 <![endif]-->

    <!--[if lt IE 6]> IE6以及IE6以下版本可识别 <![endif]-->

    <!--[if gte IE 6]> IE6以及IE6以上版本可识别 <![endif]-->

    <!--[if IE 7]> 仅IE7可识别 <![endif]-->

    <!--[if lt IE 7]> IE7以及IE7以下版本可识别 <![endif]-->

    <!--[if gte IE 7]> IE7以及IE7以上版本可识别 <![endif]-->

    placeholder

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    textarea[name='test']::-webkit-input-placeholder::after {
    display:block;
    content:"Line 2\A Line 3";
    color: red;
    }

    textarea[name='test']::-webkit-input-placeholder::before {
    color:#666;
    content:"Line 1\A Line 2\A Line 3\A";
    }

    layui-github

    layer文档

    layer.comfirm弹窗按钮文字和事件

    layui表格的复选框全选和单选的功能-全选所有分页的数据

    1. 表格需要导出的,导出时,要将自定义的复选框去除

    2. 1
      2
      3
      4
      { field: 'checkbox', title: '<input type="checkbox" lay-filter="allAccountList" lay-skin="primary">', width: 66 ,templet: function(res){
      return '<input type="checkbox" data-id="'+ res.id +'" lay-filter="accountList" lay-skin="primary">'
      }}

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    // 监听全选复选框
    form.on('checkbox(allAccountList)', function(data){
    if(!list.length) {
    $('input[lay-filter="allAccountList"]').prop('checked', false);
    }
    // 是否全选
    var isAll = data.elem.checked ? true : false;

    // 是否被选中
    if(isAll) {
    ids = list.map(function(item){
    return item.id;
    })
    } else {
    ids = [];
    }

    // 更新复选框样式
    $('.layui-table input[type="checkbox"]').prop('checked', isAll);
    // 重新渲染
    form.render('checkbox');
    });

    // 监听单选复选框
    form.on('checkbox(accountList)', function(data){
    // 是否被选中
    var isChecked = data.elem.checked;
    // 是否全选
    var isAll = false;
    // 当前项的id
    var _id = $(data.elem).data("id");

    if(isChecked) {
    // 追加
    ids.push(_id);
    isAll = (ids.length == list.length) ? true : false;
    } else {
    // 减去
    var index = ids.indexOf(_id);
    ids.splice(index, 1);

    isAll = false;
    }

    // 更新全选复选框的样式
    $('input[lay-filter="allAccountList"]').prop('checked', isAll);
    // 重新渲染
    form.render('checkbox');

    });

    layui表格复选框全选-全选当前页面(layui自身功能)

    触发复选框选择

    1
    2
    3
    4
    5
    6
    table.on('checkbox(test)', function(obj){
    console.log(obj); //当前行的一些常用操作集合
    console.log(obj.checked); //当前是否选中状态
    console.log(obj.data); //选中行的相关数据
    console.log(obj.type); //如果触发的是全选,则为:all,如果触发的是单选,则为:one
    });

    数据操作

    1
    2
    3
    4
    5
     // 获取选中数据

    var checkStatus = table.checkStatus('idTest')
    ,data = checkStatus.data;
    layer.alert(JSON.stringify(data));
    1
    2
    3
    4
    5
     //获取选中数目

    var checkStatus = table.checkStatus('idTest')
    ,data = checkStatus.data;
    layer.msg('选中了:'+ data.length + ' 个');
    1
    2
    3
    4
    //验证是否全选

    var checkStatus = table.checkStatus('idTest');
    layer.msg(checkStatus.isAll ? '全选': '未全选')

    移动端,点击日期插件不显示

    解决方法:加上,trigger: ‘click’ //采用click弹出

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    laydate.render({
    elem: '#compareTime' //指定元素
    , type: 'date'
    , max: endTime
    , min: minTime
    , trigger: 'click' //采用click弹出
    , done: function (value, date, endDate) {
    ....
    },
    ready: function(date){
    .....
    });

    判断复选框是否选中(获取复选框的值)

    1
    data.elem.checked

    设置layer-alert和layer-comfirm为不可resize

    1
    将resize参数设置为false

    layui表格固定表头

    给表格设置高度

    1
    2
    3
    4
    5
    table.render({
    elem: '#hourData'
    , data: res
    , height: 330
    });

    导出excel表格

    1
    2
    3
    4
    5
    6
    7
    var ins1 = table.render ({
    elem: '#demo '
    ,id: 'test'
    ...
    })
    // 将上述表格示例导出为csv文件
    table.exportFile(ins1.config.id,data) ; // data为该实例中的任意数量的数据

    例子:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    // 渲染表格
    function table_list(list){
    var cols = getIndexs();
    console.log(cols);
    table.render({
    elem:"#campaigninfo_ table'
    , page: true // 开启分市
    , id:"campaigninfoTable"
    , title:”推广活动详情"
    , cols: [cols]
    , data: list
    });
    };

    // 导出按钮
    $(".down-file").click(function() {
    var cols = getIndexs();
    var arr = [] ;
    for(var i = 0; i< cols.length; i++) {
    arr.push(cols[i].title);
    }
    // 导出所有数据,所以用返回的全部数据
    table.exportFile("campaigninfoTable", list, 'xls'); // 默认导出csv, 也可以为: xls
    })

    导出excel表格时,去掉页面表头显示的小图标

    去掉导出表格的表头显示的小图标

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    var campaigninfoTable;
    // 渲染表格
    function table_list(list){
    var cols = getIndexs();
    // 不受影响的表头
    var colsold = $.extend(true,[],cols);

    campalgnintoTable = table.render( {
    elem:'#campaigninfo_table'
    , page: true // 开启分页
    , cellMinwidth: 160
    , id: "campaigninfoTable”
    , title: "推广活动详情”
    , cols:[colsold]
    , data: list
    , done: function (res, curr, count) {
    // 表格头部样式处理
    tableHeaderscroll(" #campaigninfo table", count);
    // 分页的显示隐藏
    }
    });
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    function downloadTable(tableobj, tableId, data) {
    // 循环表头,将图标去掉(下载表格前,将图标去掉)
    var colsNew = table0bj.config.cols[0];
    var colsold = $.extend(true,[] , colsNew);
    for (var item in colsNew){
    var title = colsNew [item]['title'];
    if (title.index0f("</span>") > -1) {
    var arr = colsNew[item]['title'].split("</span>");
    colsNew[item]['title'] = arr[1];
    }
    }

    // 设置新表头
    table0bj.config.cols[0] = colsNew;
    if (data.length){
    // 导出所有数据,所以用返回的全部数据
    layui.table.exportFile(tableId, data,'xls'); // 默认导出csV,也可以为: xls
    // 设置有图标表头
    table0bi.config.cols[0] = cols0ld;
    }else{
    layer.msg('暂无数据');
    }
    });

    点击下载时,将表格的头部图标去掉,执行了下载表格的函数之后,将表头的图标加上。
    注意:由于表头cols是对象,指向地址,修改了,会影响全局的(例如:点击时间间隔时会拿到去掉图标的表头)
    解决:(保留原来的不加以修改的表头数据)

    修改重载表格时的加载图标

    修改重载表格时的加载图标

    • 如果只修改样式

      1
      2
      3
      4
      .layui-table-view .layui-table-init .layui-icon-loading{
      font-size: 60px;
      color: #666;
      }
    • 如果不想页面显示表格加载图标

      1
      2
      3
      .layui-table-view .layui-table-init .layui-icon-loading{
      display: none !important;
      }

    表格表头标题之间边框不显示

    ie浏览器,layui表格的表头不显示边框

    th本来是position:relative;改为position: static;

    1
    2
    3
    .layui-table td, .layui-table th{
    position: static\9;
    }

    修改了layui表格的内容,不刷新页面,只刷新表格内容,页码不刷新解决方法

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    function render_table(tabledata, cur) {
    ·········
    , page: {
    curr: cur
    }
    , data: tabledata
    ·········
    }

    //获取当前页
    var curr = $(".layui-laypage-skip input").val();
    //重新渲染表格
    <!-- res.data:修改数据后,重新返回渲染表格的数据 -->
    <!-- 从curr页开始渲染表格 -->
    render_table(res.data, curr);

    layui同时清空多个表单元素的值

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    1、 form 加上 lay-filter属性  lay-filter="group_form"
    2、
    $("#cancel").click(function() {
    form.val("group_form", {
    "sdk": "", //单选框清空不了
    "name": "", //输入框可以清空
    "sort": "", //复选框清空不了
    "ddddd": "", //下拉框可以清空
    "password": "" //密码框可以清空
    })
    })

    将MD5定义成layui的模块

    扩展一个 layui 模块

    1、在md5的js文件最后加上:

    1
    2
    3
    layui.define(function(exports){ 
    exports('mymd', {});
    });

    2、如果mymd.js文件放在与使用它的html文件同一个目录下,在html文件中直接使用:

    1
    2
    3
    4
    5
    6
    7
    //使用拓展模块
    layui.use(['mymd'], function(){
    var mymd = layui.mymd;

    mymd.hash = md5; //md5加密方法
    console.log(mymd.hash("md5加密"));
    });

    3、如果mymd.js文件放在与使用它的html文件不同目录下,在html文件中要在 extend 指定路径:

    1
    2
    3
    layui.extend({
    mymd: './js/mymd'
    })

    再使用:

    1
    2
    3
    4
    5
    6
    7
    //使用拓展模块
    layui.use(['mymd'], function(){
    var mymd = layui.mymd;

    mymd.hash = md5; //md5加密方法
    console.log(mymd.hash("md5加密"));
    });

    laypage

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    layui.use(['laypage', 'layer'], function(){
    var laypage = layui.laypage
    ,layer = layui.layer;

    //完整功能
    laypage.render({
    elem: 'demo7'
    ,count: 100
    ,layout: ['count', 'prev', 'page', 'next', 'limit', 'skip']
    ,jump: function(obj){
    console.log(obj)
    }
    });

    });

    layui日期时间段的设置,开始时间-结束时间

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    var nowTime = new Date( ).valueOf( );

    var start = laydate.render({
    elem: "#start",
    min: nowTime,
    done: function(value, date) {
    endMax = end.config.max;
    end.config.min = date; // 根据开始时间来设置结束时间的最小值/最大值
    end.config.min.month = date.month - 1;
    }
    })

    var end = laydate.render({
    elem: "#end",
    min:nowTime, // 结束时间初始化的时候要设置一个值,不然开始时间的回调中,设置了也不起作用。初始化的时候就要写上nowTime这个,不然动态控制不了
    done: function(value, date) {

    }
    })

    修改开始时间和结束时间之间的符号

    方法:修改laydate.js文件里面的t.range = “-“为t.range = “/“

    修改layui/lay/modules/laydate.js:

    1
    (t.range === !0 && (t.range = '/'))   改为: (t.range === !0 && (t.range = '-')) 

    laytui表格内容超过表格长度的处理

    当表格单元格的文字的长度超过表格当前列的宽度时,点击单元格的内容,会出现如图问题:

    当表格单元格的文字的长度超过表格当前列的宽度时

    解决方法(使用css样式控制它隐藏):

    1
    2
    .layui-table-tips-main{display:none}
    .layui-table-tips-c{display:none}

    https://www.cnblogs.com/pyspang/p/11164736.html

    https://www.cnblogs.com/xxzb/p/12618226.html

    layui分页插件,一直在调用方法的解决办法

    (死循环)

    由于每次加载时都会执行jump回调,所以初次不让它执行jump里的方法(!first)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    laypage.render({
    elem: 'demo8'
    , count: totalCount
    , layout: ['count', 'prev', 'page', 'next', 'limit', 'refresh', 'skip']
    , jump: function (obj, first) {
    //模拟渲染
    page = obj.curr;
    limit = obj.limit;
    if (!first) {
    //执行方法
    }
    }
    });

    requriejs加载layui

    渲染动态表头

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    var dynamicCols = [];     //用来存放动态表头
    var colsList = []; //表头列表
    $(数据返回的表头数组).each(function (i, item) {
    //设置表头
    var info = { field: item.field, title: item.title };
    colsList.push(info);
    }
    dynamicCols.push(colsList);

    //执行渲染
    table.render({
    elem: "#demo" //指定原始表格元素选择器(推荐id选择器)
    ,height: 315 //容器高度
    ,cols:dynamicCols //设置表头

    //,..... //其他参数
    });

    动态修改layui的select框的值

    例如:点击表格的编辑按钮,获取当前行数据,根据不同的系统名称,在弹出的弹窗中,将系统选中

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <form class="layui-form" lay-filter="whitelistForm">
    <input type="text" name="whiteKey" placeholder="搜索设备名" autocomplete="off" class="layui-input">
    </form>

    // 点击表格的编辑按钮
    ....
    else if(obj.event === 'edit') {
    var dataValue = data.system === 'iOS' ? '1' : '2';

    // 方法一或方法二的代码
    }
    .....
    1. 方法一:

      1
      form.val('whitelistForm', {'whiteKey': dataVale});
    2. 方法二:

      1
      2
      3
      4
      // 首先需要使用lay-value来确定需要设置哪个元素自动选择
      var select = 'dd [ lay-value=' +data.id + ']';
      // 触发点击事件,实现自动选择
      $("input[ name='system']").siblings("div.layui-form-select").find('dl').find(select).click();

    layui日期时间段的设置,开始时间-结束时间

    最小值最大值动态设置的问题

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    /* ----日期初始化-开始---- */
    $("#baseTime").val(today);
    $("#compareTime").val(adDate.getDate(-1)); // 前一天
    // 基础日期
    laydate.render({
    elem: '#baseTime'
    , type: 'date'
    , min: minTime
    , max: today
    , trigger: 'click' // 采用click弹出
    , done: function (value, date, endDate) {
    ......
    }
    });

    // 对比日期
    laydate.render({
    elem: '#compareTime'
    , type: 'date'
    , min: minTime
    , max: today
    , trigger: 'click' // 采用click弹出
    , done: function (value, date, endDate) {
    .....
    },
    ready: function(date){
    var y = date.year
    , m = date.month
    , d = date.date;

    m = (m < 10) ? '0' + m : m;
    d = (d < 10) ? '0' + d : d;

    // 获取输入框上一次的日期
    compareTime = y + '-' + m + '-' + d;
    }
    });
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    var today = adDate.getDate(0);	// 今日(封装的一个方法)
    // 激活时间段日期选择
    var activeTime = laydate.render({
    elem: '#actRange'
    , type: 'date'
    , range: true
    , max: today // 最大值为今天
    , trigger: 'click' // 采用click弹出
    , done: function (value, date, endDate) {
    // 设置付费时间段最小日期
    payRange.config.min = {
    year:date.year,
    month:date.month - 1,
    date:date.date
    }
    ......
    }
    });
    // 付费时间段选择
    var payRange = laydate.render({
    elem: '#payRange'
    , type: 'date'
    , range: true
    , min: today
    , max: today
    , trigger: 'click' // 采用click弹出
    , done: function (value, date, endDate) {
    .....
    }
    });

    文件上传

    upload模块

    多次上传同一文件,不弹报错信息

    场景:1.选择错误格式的文件(a.jpg),弹出错误提示”文件格式不对“;2.再次选择a.jpg,就不弹错误提示;

    3.在1的基础上,选择其他文件(b.jpg),会弹错误提示

    解决:需要清空file中的value值。如果值是一样的(也就是选择同一个文件),不会执行判断,所以弹出错误提示时,需要将它的value值清空

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    // 重新上传签名文件按钮
    upload.render({ //允许上传的文件后缀
    elem: '#uploadSign'
    , url: ''
    , accept: 'file' //普通文件
    , auto: false
    , bindAction: '#uploadFile'
    // , exts: 'keystore|jks' //只允许上传文件 (这样写会调用layui本身的文件上传错误提示)
    // , size: 1024 //限制文件大小,单位 KB
    , done: function(res){
    // 成功回调
    }
    ,choose: function(obj){
    obj.preview(function(index, file, result){
    var suffix = file.name.split(".")[1] // 文件后缀
    , want_type = (suffix === 'keystore' || suffix === 'jks') // 只允许上传文件的格式
    , want_size = file.size <= 1024 * 1024 // 文件最大大小
    , flag = want_type && want_size // 是否符合上传条件
    , error_msg = !want_type ? '上传的签名文件的格式不对' : (!want_size ? '签名文件不能超过1.00MB' : ''); // 错误提示

    if(flag) {
    obj.upload(index, file); // 满足条件调用上传方法
    } else {
    layer.msg(error_msg, {time: 1000});
    // 清空file中的值(避免多次上传同一文件,不弹错误提示)
    $('input[name="file"]').val('');
    }
    });
    }
    });

    动态修改复选框的选中状态

    1
    2
    3
    4
    5
    6
    7
    if ($('.xxxx').attr("checked") === "checked") { //判断是否选中
    //设置选中 注意这里使用的是prop(), 这里要是使用了attr()是无效的
    $('.xxxx').prop("checked", true);
    } else {
    $('.xxxx').prop("checked", false);
    }
    form.render(); //重新渲染 ————————最重要的记得加上这句话---------

    获取数据表格选中值

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    <table id="activity-manage" lay-filter="packageList"></table>


    var activityManage = table.render({
    elem: '#activity-manage'
    , id: "activityManage"
    , cellMinWidth: 130
    .....

    });


    //监听数据表格的复选框
    table.on('checkbox(packageList)', function (obj) {
    console.log(obj.type); //如果触发的是全选,则为:all,如果触发的是单选,则为:one
    console.log(obj); // 这里的data数据只针对当前选中的那一项

    // 选择状态 (activityManage是config里面的id)
    var checkStatus = table.checkStatus("activityManage");
    console.log(checkStatus.data) //获取选中行的数据
    console.log(checkStatus.data.length) //获取选中行数量,可作为是否有选中行的条件
    console.log(checkStatus.isAll ) //表格是否全选
    console.log(checkStatus); // 这里的data,是当前已选中的所有数据的数组集合
    .........

    });

    动态设置下拉框的值

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    //设置下拉框默认选项
    form.val("deviceManage", {
    "os": 2
    });
    <form class="layui-form margin-t10" action="" lay-filter="deviceManage" id="white_device">
    <select name="os" lay-filter="os">
    <option value="1">iOS</option>
    <option value="2" selected>Android</option>
    </select>
    </form>

    提示信息弹完再做其他操作(处理新增/编辑页面跳转这种情况)

    1
    2
    3
    4
    5
    6
    7
    8
    layer.msg(res.msg, {time: 1000}, function() {
    // 可点击
    $("#submitBtn").removeAttr("disabled");

    if ( res.code == 1 ){
    $.form.href("{:url('xy/account/role')}");
    }
    });

    动态修改单选框的值

    1
    2
    3
    4
    $('input[name="isDiscount"][value="0"]').prop('checked', true);
    form.render("radio");

    // 需要用到prop('checked', true);
    1
    2
    3
    form.val("addpackage", {
    "isDiscount": 0
    });

    xmSelect下拉多选

    xm-select文档

    接口处理完,弹出提示,提示语结束才跳转页面

    1
    2
    3
    4
    5
    6
    layer.msg(res.msg, {time: 1000}, function(){
    // 成功-页面跳转
    if(res.code == 1) {
    $.form.href("{:url('xy/account/index')}");
    }
    });

    layui获取已选复选框的值

    1
    2
    3
    4
    var arr_box = [];
    $('input[type=checkbox]:checked').each(function() {
    arr_box.push($(this).val());
    });

    初始化表格渲染条数

    1
    2
    3
    4
    table.init('data-detail', {
    limit: 10 //注意:请务必确保 limit 参数(默认:10)是与你服务端限定的数据条数一致
    //支持所有基础参数
    });

    获取表单提交的数据

    1
    2
    3
    4
    5
    6
    <button href="javascript:;" class="layui-btn layui-btn-normal" lay-submit lay-filter="setAuthority">保存</button>

    form.on('submit(setAuthority)', function(data){
    var param = data.field;
    ......
    });

    注:对应的提交按钮,要添加 lay-submit 属性

    Tab的切换功能,切换事件监听等,需要依赖element模块

    1
    2
    3
    layui.use(['element'], function () {
    var element = layui.element;
    });

    防止表单多次提交

    1
    2
    3
    4
    // 设置提交按钮不可点击
    $("#submitBtn").attr("disabled", true);

    $("#submitBtn").removeAttr("disabled");
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    // 监听保存按钮
    form.on('submit(save)', function(data){
    var params = data.field;

    // 设置提交按钮不可点击
    $("#submitBtn").attr("disabled", true);

    // 请求接口处理
    $.post('/xy/account/roleAdd', params, function(res){
    layer.msg(res.msg, {time: 1000}, function() {
    // 可点击
    $("#submitBtn").removeAttr("disabled");

    if ( res.code == 1 ){
    $.form.href("{:url('xy/account/role')}");
    }
    });
    return false;
    });

    return false;
    });

    layui表格合并行

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    // 表格合并行
    function merge(res, names, indexs) {
    var data = res.data;
    //定位需要添加合并属性的行数
    var mergeIndex = 0;
    //这里涉及到简单的运算,mark是计算每次需要合并的格子数
    var mark = 1;
    //需要合并的列名称
    var columsName = names;
    //需要合并的列索引值
    var columsIndex = indexs;

    //这里循环所有要合并的列
    for (var k = 0; k < columsName.length; k++) {
    //所有行
    var trArr = $(".layui-table-body>.layui-table").find("tr");
    //这里循环表格当前的数据
    for (var i = 1; i < res.data.length; i++) {
    //获取当前行的当前列
    var tdCurArr = trArr.eq(i).find("td").eq(columsIndex[k]);
    //获取相同列的第一列
    var tdPreArr = trArr.eq(mergeIndex).find("td").eq(columsIndex[k]);
    //后一行的值与前一行的值做比较,相同就需要合并
    if (data[i][columsName[k]] === data[i-1][columsName[k]]) {
    mark += 1;
    //相同列的第一列增加rowspan属性
    tdPreArr.each(function () {
    $(this).attr("rowspan", mark);
    });
    //当前行隐藏
    tdCurArr.each(function () {
    $(this).css("display", "none");
    });
    }else {
    mergeIndex = i;
    //一旦前后两行的值不一样了,那么需要合并的格子数mark就需要重新计算
    mark = 1;
    }
    }
    mergeIndex = 0;
    mark = 1;
    }
    }

    layui-layer 遮罩

    弹出层区域默认自带0.3透明度的黑色背景蒙层

    layer.load(icon, options) - 加载层

    1
    2
    3
    4
    5
    6
    7
    8
    //eg1
    var index = layer.load();
    //eg2
    var index = layer.load(1); //换了种风格
    //eg3
    var index = layer.load(2, {time: 10*1000}); //又换了种风格,并且设定最长等待10秒
    //关闭
    layer.close(index);

    layui 时间插件laydate中动态设置改变min和max值

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    layui.use('laydate', function(){
    var laydate = layui.laydate;

    // 开始日期
    var startDate = laydate.render({
    elem: '#startDate'
    ,max : "2099-12-31"
    ,done: function(value,date){
    endDate.config.min ={
    year :date.year
    ,month: date.month-1
    ,date: date.date
    };
    // 可不加,根据需求来
    $('#endDate')[0].focus();
    }
    });
    // 结束日期
    var endDate = laydate.render({
    elem: '#endDate '
    ,min: "1900-1-1"
    ,done: function (value,date) {
    startDate.config.max={
    year :date.year
    ,month: date.month-1
    ,date: date.date
    }
    }
    });
    });

    如果想去掉表单中所有输入框的浏览器历史记录

    直接给form元素加上autocomplete=”off”

    1
    <form autocomplete="off"></form>

    layer弹两次

    1
    2
    // 加上id-处理提示弹两次
    layer.msg('复制成功', {id: 'clipboard', time: 1000});

    layui表格没有数据的时候,表头没有横向滚动条

    1
    2
    3
    修改一下table.js源码
    that.layMain.find('tbody').html('');
    that.layHeader.css('overflow','auto');//新加的

    Layui数据表格显示无数据提示问题

    layui-排序功能

    如果不使用layui本身的前端排序功能,需禁止:

    1
    ,autoSort: false // 禁用前端自动排序

    更新全部表单元素:

    1
    form.render(); 

    扩展一个模板

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
     /**扩展一个模块**/      
    layui.define(function(exports){
    var obj = {
    hello: function(str){
    alert('Hello '+ (str||'mymod'));
    },

    };

    // 输出接口
    exports('mymod', obj);
    });


    layui.extend({
    mod2: 'http://192.168.0.59/mymod/' // {/}的意思即代表采用自有路径,即不跟随 base 路径
    });

    // 使用拓展模块
    layui.use(['mymod'], function(){
    var mymod = layui.mymod;

    mymod.hello('World!'); //弹出 Hello World!
    });

    layui文件上传组件“请求上传接口出现异常”问题解决方案

    layui上传错误请求上传接口出现异常解决方案

    解决LAYUI数据表格中嵌套下拉框显示问题

    layui学习——数据表格嵌套下拉列表,并实现动态更新

    解决layui数据表格中嵌套下拉框显示问题

    Layui数据表格中使用下拉选框被遮挡的解决方法,要在表格渲染中操作

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    // 表格渲染
    table.render({
    elem: '#groupTable'
    , limit: 10
    , cols: [[
    { type: 'numbers', title: '序号', width: 100 }
    , { title: '下拉框', minWidth: 140 , templet: function (res) {
    var selectStr = '<select name="test">';
    for(var i = 0; i< 10; i ++) {
    selectStr += '<option value="' + i+ '">' + i+ '</option>'
    }
    selectStr += '</select>'
    return selectStr;
    } }
    ]]
    , page: {
    curr: this_curr
    }
    , data: list
    , done: function (res, curr, count) {
    $(".layui-table-body, .layui-table-box, .layui-table-cell").css('overflow', 'visible')
    }
    });

    EasyAdmin

    LAYUI MINI

    EasyAdmin—layui mini 页面——表格内容渲染的方法在public/static/admin/js/对应页面的js文件,页面在app/admin/view

    在线DEMO

    表格的筛选条件使用日期格式:

    使用search: 'range'

    1
    {field: 'create_time', minWidth: 80, title: '操作时间',search: 'range'},

    表格的筛选条件使用下拉框:

    使用search: 'select'

    1
    2
    3
    4
    5
    6
    7
    8
    {field: 'status', minWidth: 80, title: '审核状态', search: 'select',selectList: {1: '已审核', 0: '未审核'},templet: function (d) {
    if(d.status == 1) {
    return "已审核";
    }else if(d.status == 0){
    return "未审核";
    }
    },
    },
    操作栏
    1
    2
    3
    4
    5
    6
    7
    8
    9
    {field: 'account_ban_status', title: '操作内容', minWidth: 80, templet: function (d) {
    if(d.status == 0) {
    return "注销账号";
    }
    if(d.status == 1) {
    return "恢复账号";
    }
    },
    },
    切换左侧导航栏或Tab栏,关闭页面的二级页面(即iframe中的弹窗内容)——修改框架代码

    public/static/plugs/lay-module/layuimini/miniAdmin.js

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    /**
    * 打开新窗口
    */
    $('body').on('click', '[layuimini-href]', function () {
    var URL = window.location.href.split("#")[1]; // 当前URL

    var loading = layer.load(0, {shade: false, time: 2 * 1000});
    var tabId = $(this).attr('layuimini-href'),
    href = $(this).attr('layuimini-href'),
    title = $(this).text(),
    target = $(this).attr('target');

    var el = $("[layuimini-href='" + href + "']", ".layuimini-menu-left");
    layer.close(window.openTips);

    // 菜单地址不等于当前URL——切换到其他页面,关闭子页面内容
    if(href !== URL) {
    var hasSecond = $('iframe[src="' + URL + '"]').contents().find('.layui-layer-iframe').length;
    if(hasSecond > 0) {
    $('iframe[src="' + URL + '"]').contents().find('.layui-layer-iframe').remove();
    $('iframe[src="' + URL + '"]').contents().find('.layui-layer-shade').remove();
    $('iframe[src="' + URL + '"]').contents().find('.layui-layer-move').remove();
    }
    }

    ......
    ......
    ......
    });

    public/static/plugs/lay-module/layuimini/miniAdmin.js

    1
    2
    3
    4
    5
    renderLogo: function (data) {
    // var html = '<a href="' + data.href + '"><img src="' + data.image + '" alt="logo"><h1>' + data.title + '</h1></a>';
    var html = '<img src="/static/common/images/logo.png" alt="logo"><h1>' + data.title + '</h1>';
    $('.layuimini-logo').html(html);
    },

    选择同一天,修改结束时间为23:59:59

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    laydate.render({
    range: true
    , type: ncV.timeType
    , elem: '[name="' + ncV.fieldAlias + '"]'
    , done: function(value, date, endDate){
    var arr = value.split(' - ')
    , day1 = arr[0].split(' ')[0] // 开始日期
    , day2 = arr[1].split(' ')[0]; // 结束日期
    if(day1 === day2) { // 同一天
    var time1 = arr[0].split(' ')[1] // 开始时间
    , time2 = arr[1].split(' ')[1]; // 结束时间
    // 判断是否都为0点,若是,将结束时间改为23:59:59
    if(time1 === time2 && time1 === '00:00:00'){
    setTimeout(function() {
    document.querySelector('[name="' + ncV.fieldAlias + '"]').value = day1 + ' ' + time1 + ' - ' + day2 + ' ' + '23:59:59';
    }, 150)
    }
    }
    }
    });

    layui表格编辑单元格时直接点击保存按钮问题

    layui表格编辑单元格–满足校验再保存-不满足校验继续展示输入框

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    // 监听单元格编辑
    table.on('edit(subpackageTable)', function(obj){
    console.log(obj.value); // 得到修改后的值
    console.log(obj.field); // 当前编辑的字段名
    console.log(obj.data); // 所在行的所有相关数据

    console.log(this)

    // 不满足校验
    if(!/^[1-9]\d*$/.test(obj.value)) {
    layer.msg('请输入大于0的正整数', {time: 1000});
    $(this).parent('td').append('<input class="layui-input layui-table-edit"></input>'); // 因为单元格编辑,页面就是给它多了个input输入框 不满足条件时,再追加进去就可以
    }

    });

    LayUI动态开启单元格可以编辑状态

    动态修改-不满足条件的不可编辑

    需求是:

    输入的条件需为大于0的正整数,若满足,则设置成功,更新设置数;若不满足,提示“请输入大于0的正整数”,提示的同时,用户点击输入框外,设置失败,收起输入框,设置数显示原数(注:交互先试试,设置失败能否不收起输入框,直至输入正确,才支持收起并设置成功;)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    // 表格渲染的done事件回调
    , done: function (res, curr, count) {
    var _index = localStorage.getItem("edit_index");
    if(_index) {
    $('.layui-table tr[data-index="' + _index + '"] ' + '[data-field="ip_reg_limit"]').append('<input class="layui-input layui-table-edit"></input>'); // 继续保留输入框
    }
    for(var i in data) {
    if(data[i]['status'] === 3) {
    $('tr[data-index="' + i + '"]').find('td[data-field="ip_reg_limit"]').data('edit', false);
    }
    }
    }

    注意:使用时,在cols中,edit要设置为text:edit: 'text',不然要验证edit事件的不起作用

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    cols:[[
    { field: 'ip_reg_limit', title: '同IP注册限制数', edit: 'text', minWidth: 120, templet:function(res){
    if(res.status == 3 || res.ip_reg_limit == 0){
    return '';
    }else {
    return '<a class="table-edit-btn">' + res.ip_reg_limit + '</a>';
    }
    }
    }
    ]]

    // edit结束后,不管值有没有改变,都会自动重新渲染一次表格
    // 监听单元格编辑
    table.on('edit(subpackageTable)', function(obj){
    // 判断是否为大于0正整数
    if(!/^[1-9]\d*$/.test(obj.value)) {
    layer.msg('请输入大于0的正整数', {time: 1000});
    var _index = $(this).parent('td').parent('tr').data('index');
    localStorage.setItem('edit_index', _index);
    // 更新表格内容
    updateTable();
    } else {
    localStorage.removeItem('edit_index');
    $.post('/xy/package/ban', {id: obj.data.id,ip_reg_limit:obj.value}, function(res){
    layer.msg(res.msg, {time: 1000});
    if(res.code == 1) {
    updateTable();
    }
    });
    }
    });

    动态设置单元格是否可以编辑

    $(".layui-table").find('td[data-field="advise"]').data('edit', false)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    // doUpdate 可编辑表格的ID名
    table.on('row(doUpdate)', function(obj){
    // advise 需要编辑的字段名
    if(obj.data.advise =='' ){
    $(".layui-table").find('td[data-field="advise"]').data('edit', true)
    }else{
    $(".layui-table").find('td[data-field="advise"]').data('edit', false)
    }
    });

    textarea标签换行符以br存入数据库 ,br转 textArea换行符

    textarea标签回车符是/n,在html里识别回车是<br/>,在存入数据库之前要进行转换成<br/>,在取出展示在html页面时才能显示换行。

    1
    2
    3
    var content = rules_content.replace(/\n/g,'<br />');

    $("#rules_content").html(content); // 写入活动规则内容

    xm-select.js引入到EasyAdmin LAYUI MINI 中遇到的问题

    引入之后,会报 xmSelect is not defined

    解决:将以下代码注释掉即可

    1
    2
    3
    // "object" === ("undefined" == typeof exports ? "undefined": _typeof(exports)) ? e.exports = t.c: "function" == typeof define && n(220) ? define(xmSelect) : window.layui && layui.define && layui.define((function(e) {
    // e("xmSelect", t.c)
    // })),

    当合并表头,动态改变列数时

    只有一列时,数据会把合并的表头也展示出来,处理方式:

    1
    2
    3
    4
    , done: function (res, curr, count) {
    $(".layui-table tbody").find(".layui-table-col-special").remove(); // 当合并表头只有一列时

    }

    动态改变合并表头合并列的数量时,colspan的数值的类型为字符串类型

    1
    2
    3
    var colspan_day = '1';  // colspan要使用字符串类型

    ,{align: 'center', title: '次日', colspan: colspan_day }

    表格表头-合并列,只有一列时,列宽设置

    layui会自动在页面生成样式,自定义样式,覆盖它

    注意:这种方法有个bug,从别的页面,切换到该页面,bug还是存在

    1
    2
    3
    4
    5
    6
    7
    8
    9
    /* 针对合并表头只有一列时 */
    .laytable-cell-1-0-20,
    .laytable-cell-1-0-21,
    .laytable-cell-1-0-22,
    .laytable-cell-1-0-23,
    .laytable-cell-1-0-24,
    .laytable-cell-1-0-25{
    width: auto !important;
    }

    表格表头-合并列,只有一列时,合并列的文字会出现换行,默认宽度为60px

    所以要给合并列加上宽度属性(根据实际情况自定义): width: 80

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    ,{align: 'center', title: '注册当天', width: 80, colspan: current_count}   
    ,{align: 'center', title: '次日', width: 80, colspan: cols_count }
    ,{align: 'center', title: '第3天', width: 80, colspan: cols_count }
    ,{align: 'center', title: '第4天', width: 80, colspan: cols_count }
    ,{align: 'center', title: '第5天', width: 80, colspan: cols_count }
    ,{align: 'center', title: '第6天', width: 80, colspan: cols_count }
    ,{align: 'center', title: '第7天', width: 80, colspan: cols_count }
    ,{align: 'center', title: '第8-14天', width: 80, colspan: cols_count }
    ,{align: 'center', title: '第15-30天', width: 80, colspan: cols_count }
    ,{align: 'center', title: '第31-45天', width: 80, colspan: cols_count }
    ,{align: 'center', title: '第46-60天', width: 80, colspan: cols_count }
    ,{align: 'center', title: '第61-90天', width: 80, colspan: cols_count }
    ,{align: 'center', title: '第91-180天', width: 80, colspan: cols_count }
    ,{align: 'center', title: '第181-360天', width: 80,colspan: cols_count }

    表格固定列与表格对应列不对齐

    渠道回收数据:

    固定列不对齐

    1. 给日期列添加unresize属性

      1
      {field: 'date', title: '日期',  width: 100, rowspan: 2, height: 81, unresize:true, fixed:'left'}
    2. 给固定列添加宽度

      1
      .fx_w112 .layui-table-fixed{  width: 112px;}
    3. 动态加上fx_w112

      1
      2
      3
      4
      5
      6
      7
      8
      // 修改第一列固定表头的高度
      if(targets_page_len !== 0) {
      $('.table-container').addClass('rowspan_2').removeClass('rowspan_1');
      $('.table-container').removeClass('fx_w112');
      } else{
      $('.table-container').addClass('rowspan_1').removeClass('rowspan_2');
      $('.table-container').addClass('fx_w112'); // 修改固定列的宽度
      }

    给日期列添加unresize属性,是因为后面给它添加固定宽度112,如果可以拖拽修改宽度,就会矛盾。