[Python自学] day-18 (1) (JS正则、第三方组件)

一、JS的正则表达式

JS正则提供了两个方法:

  test():用于判断字符串是否符合规定;

  exec():获取匹配的数据;

 

1.test()

定义一个正则表达式:

reg = /\d+/;   // 用于判断多个数字
reg.test("akshdjkf78snjdkf");  // 返回true,因为中间含有数字

上述的字符串能够满足正则表达式,所以返回true,但这种匹配无法用于验证手机号。

 

reg = /^\d+$/;   // 匹配从开头到结尾都是数字
reg.test("13928787837");  // 返回true
reg.test("1237h39284");  //返回false

这样就可以检验是否全是数字。

 

2.exec()

同样定义一个正则表达式:

reg = /\d+/;
reg.exec("sdufh_67_nsjkd_89_djkjs");  // 返回["67"]

我们得到的结果是["67"],也就是说只匹配到第一个数字。

 

全局匹配:

如果我们要想拿到所有符合规则的内容,则需要使用全局匹配:

reg = /\d+/g;
reg.exec("sdufh_67_nsjkd_89_djkjs");  // 返回["67"]
reg.exec("sdufh_67_nsjkd_89_djkjs");  // 返回["89"]
reg.exec("sdufh_67_nsjkd_89_djkjs");  // 返回null

reg.exec("sdufh_67_nsjkd_89_djkjs");  // 再次执行返回["67"]

当匹配到最后一个符合规则的内容后,下一次再次执行会返回null,我们可以用此来判断是否查找完毕。如果在返回null后再次执行,又会从头开始。

 

分组:

text = "JavaScript is more fun than Java or JavaBeans!";
reg = /\bJava(\w*)\b/g;
reg.exec(text);  //返回["JavaScript","Script"]
reg.exec(text);  //返回["Java",""]
reg.exec(text);  //返回["JavaBeans","Beans"]
reg.exec(text);  //返回null

reg.exec(text);  //返回["JavaScript","Script"]

使用"()"将需要提取的部分括起来就可以获取内容。

 

匹配模式:

前面我们使用了全局匹配"g",其他还有"i"和"m"模式。

"i"模式:不区分大小写。这个很好理解。

"m"模式:多行模式。这里的多行,不是指可以匹配多行文本("g"默认就可以匹配带换行的文本)。这里的多行是说当在正则表达式中要匹配开头和结尾("^"和"$")的时候,对每一行都生效。例如:

text = "JavaScript is more fun than \nJava or JavaBeans!"
reg = /^Java(\w*)/g;  //匹配以Java开头的单词
reg.exec(text);  //返回["JavaScript","Script"]
reg.exec(text);  //返回null

我们可以看到,如果只是全局模式,只能匹配到JavaScript,因为只有这个单词是位于开头。

我们加上"m"模式:

text = "JavaScript is more fun than \nJava or JavaBeans!"
reg = /^Java(\w*)/gm;  //匹配以Java开头的单词
reg.exec(text);  //返回["JavaScript","Script"]
reg.exec(text);  //返回["Java",""]
reg.exec(text);  //返回null

加上"m"后,位于换行符后面的Java也被当做位于开头的单词。

 

二、回顾默认事件和绑定事件

回顾:https://www.cnblogs.com/leokale-zz/p/12001523.html#maodian_12

在<a>标签和<form>中的<input type="submit"/>中,我们自定义绑定的事件是优先于默认事件执行的。所以我们可以在自定义绑定事件中实现对内容的验证。

 

这里还有一个标签是例外,例如<input type="checkbox"/>标签。点击打钩是他的默认事件。如果我们绑定一个自定义事件,这个事件是在默认事件之后才执行的。例如:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>test1</title>
</head>
<body>
    <input type = "checkbox"/>

    <script src="jquery-1.12.4.js"></script>
    <script>
        // 绑定自定义事件,检查checkbox是否被选中,如果选中则打印true,未选中打印false
        $(":checkbox").click(function(){
            var v = $(this).prop("checked");
            console.log(v);
        });
    </script>
</body>
</html>

checkbox默认是未选中的,当我们勾选checkbox时,如果打印的是true,那说明是默认事件(勾选)先于打印事件执行的。如果打印false,表示打印事件先执行,然后checkbox才被勾选上。

结果:

 

结果是打印的true,说明默认事件(勾选)是先于打印事件执行的。

 

三、几种常用组件

所谓前端组件,就是别人给你实现好的UI效果,包含CSS样式和JS代码。

EasyUI:提供了比较全的UI效果,但是要对其进行修改时,要求相对较高一些。

jQueryUI:较EasyUI功能相对不那么齐全,但使用比较简单。

以上两个UI组件,比较适合用于后台管理

 

BootStrap:效果最好看,目前使用广泛。适合实现网站首页等效果比较绚的地方。可以找许多模板直接使用。

 

以上三个UI组件,官方网站都有大量的Demo,下载的源码中也有demo效果可以参考。

 

对于bootstrap组件,我们了解三点:

1.响应式

  对于CSS来说,我们可以根据某个条件是否成立,来决定哪个CSS效果生效。

例如:当页面宽度缩小到一定的像素,页面顶部的菜单就会全部归入一个纵向列表中。如下所示:

缩小前:

 缩小后:

 

这是通过在CSS中使用一个叫@media的关键字来实现的:

<head>
    <meta charset="UTF-8">
    <title>test1</title>
    <style>
        .c1{
            background-color: green;
            height: 50px;
        }
        @media (min-width: 700px){
            .c2{
                background-color: red;
            }
        }
    </style>
</head>
<body>
    <div class="c1 c2"></div>
</body>

当页面宽度大于等于700时,显示红色,当小于700时,显示绿色:

大于700px:

小于700px:

除了以上这个简单的颜色变化,@media还可以用于form表单中<input>标签横向排列和纵向排列的切换等场景。

 

2.图标

我们以前在页面中添加图标都是用图片的形式来做的,如果使用bootstrap等组件,则使用@font-face来实现。

@font-face的图标是使用字体文件来实现的,我们只需要引用他规定好的标签即可,例如:

<span class="glyphicon glyphicon-camera" aria-hidden="true"></span>

这个标签代表的就是:

我们可以在 https://v3.bootcss.com/components/ 中找到这个图标,使用右键->检查来查看他的标签。

该图标是通过这个<span>标签中的class样式来实现的,bootstrap帮我们通过样式找到位于字体文件中的相应图标,并显示在标签所在位置。

 

这些图标存在于以下文件中:

 

 在css文件中,我们可以找到:

.glyphicon-camera:before {
  content: "\e046";
}

这里面的content: "\e046"代表的就是这个相机图标。。

 

3.基本使用

首先将bootstrap包拷贝到项目中:

 

导入bootstrap.css和bootstrap.js:

<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <link rel="stylesheet" href="bootstrap-3.3.7-dist/css/bootstrap.css"/>
    <link rel="stylesheet" href="bootstrap-3.3.7-dist/css/bootstrap-theme.css"/>
</head>
<body>
    <script src="jquery-1.12.4.js"></script>
    <script src="../test1210/bootstrap-3.3.7-dist/js/bootstrap.js"></script>
</body>

在bootstrap的demo中找到需要的组件,将代码复制在需要的位置:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <link rel="stylesheet" href="bootstrap-3.3.7-dist/css/bootstrap.css"/>
    <link rel="stylesheet" href="bootstrap-3.3.7-dist/css/bootstrap-theme.css"/>
</head>
<body>
    <!-- 导航 -->
    <nav class="navbar navbar-default">
      <div class="container-fluid">
        <!-- Brand and toggle get grouped for better mobile display -->
        <div class="navbar-header">
          <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1" aria-expanded="false">
            <span class="sr-only">Toggle navigation</span>
            <span class="icon-bar"></span>
            <span class="icon-bar"></span>
            <span class="icon-bar"></span>
          </button>
          <a class="navbar-brand" href="#">Brand</a>
        </div>

        <!-- Collect the nav links, forms, and other content for toggling -->
        <div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
          <ul class="nav navbar-nav">
            <li class="active"><a href="#">Link <span class="sr-only">(current)</span></a></li>
            <li><a href="#">Link</a></li>
            <li class="dropdown">
              <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">Dropdown <span class="caret"></span></a>
              <ul class="dropdown-menu">
                <li><a href="#">Action</a></li>
                <li><a href="#">Another action</a></li>
                <li><a href="#">Something else here</a></li>
                <li role="separator" class="divider"></li>
                <li><a href="#">Separated link</a></li>
                <li role="separator" class="divider"></li>
                <li><a href="#">One more separated link</a></li>
              </ul>
            </li>
          </ul>
          <form class="navbar-form navbar-left">
            <div class="form-group">
              <input type="text" class="form-control" placeholder="Search">
            </div>
            <button type="submit" class="btn btn-default">Submit</button>
          </form>
          <ul class="nav navbar-nav navbar-right">
            <li><a href="#">Link</a></li>
            <li class="dropdown">
              <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">Dropdown <span class="caret"></span></a>
              <ul class="dropdown-menu">
                <li><a href="#">Action</a></li>
                <li><a href="#">Another action</a></li>
                <li><a href="#">Something else here</a></li>
                <li role="separator" class="divider"></li>
                <li><a href="#">Separated link</a></li>
              </ul>
            </li>
          </ul>
        </div><!-- /.navbar-collapse -->
      </div><!-- /.container-fluid -->
    </nav>
    <!-- 图标 -->
    <div>
        <span class="glyphicon glyphicon-heart" aria-hidden="true"></span>
        <span class="glyphicon glyphicon-flash" aria-hidden="true"></span>
        <span class="glyphicon glyphicon-console" aria-hidden="true"></span>
    </div>
    <!-- button -->
    <div class="btn-group">
        <button type="button" class="btn btn-danger">Action</button>
        <button type="button" class="btn btn-danger dropdown-toggle" data-toggle="dropdown" aria-haspopup="true"
                aria-expanded="false">
            <span class="caret"></span>
            <span class="sr-only">Toggle Dropdown</span>
        </button>
        <ul class="dropdown-menu">
            <li><a href="#">Action</a></li>
            <li><a href="#">Another action</a></li>
            <li><a href="#">Something else here</a></li>
            <li role="separator" class="divider"></li>
            <li><a href="#">Separated link</a></li>
        </ul>
    </div>
    <script src="jquery-1.12.4.js"></script>
    <script src="../test1210/bootstrap-3.3.7-dist/js/bootstrap.js"></script>
</body>
</html>

效果:

在上面的效果中,我们发现导航条是带圆角的:

 

所以,我们经常要修改第三方组件的一些css效果,为了避免CSS覆盖不成功,我们可以使用"! important"关键字,如下:

<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        .no-radius{
            border-radius: 0 !important;
        }
    </style>
    <link rel="stylesheet" href="bootstrap-3.3.7-dist/css/bootstrap.css"/>
    <link rel="stylesheet" href="bootstrap-3.3.7-dist/css/bootstrap-theme.css"/>
</head>

然后在相应的<nav>标签中使用这个".no-radius"样式:

<body style="background-color: red;">
    <!-- 导航 -->
    <nav class="navbar navbar-default no-radius">
    ......
    </nav>
</body>

 

 

四、利用插件做一个轮播图

利用一个叫bxSlider的插件,做一个主站轮播图效果:

 

下载bxSlider插件:

下载地址:https://bxslider.com/install/

复制进项目:

导入并使用:

<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <link rel="stylesheet" href="bxslider-4-4.2.12/src/css/jquery.bxslider.css"/>
</head>
<body>
    <div class="bxslider">
      <div><img src="images/car1.png" title="Car 1"></div>
      <div><img src="images/car2.png" title="Car 2"></div>
      <div><img src="images/car3.png" title="Car 3"></div>
      <div><img src="images/car4.png" title="Car 4"></div>
      <div><img src="images/car5.png" title="Car 5"></div>
    </div>
    <script src="jquery-1.12.4.js"></script>
    <script src="../test1210/bxslider-4-4.2.12/src/js/jquery.bxslider.js"></script>
    <script>
      $(function(){
        $('.bxslider').bxSlider({
          mode: 'fade',   // 图片轮播的方向,'horizontal'横向,'vertical'纵向,'fade'消失
          captions: true,   // 是否显示每张图下面的信息
          slideWidth: 1200   // 图的宽度,一般和图片一样
        });
      });
    </script>
</body>

由于bxSlider是jQuery的扩展插件,所以必须导入jQuery。然后使用扩展方法bxSlider来实现轮播效果;

posted @ 2019-12-10 18:18  风间悠香  阅读(366)  评论(0编辑  收藏  举报