javaScript(正则,DOM)

目录

正则语法

练习

邮件的正则

DOM

 节点

事件

文档的加载

dom查询

获取元素节点

 获取元素节点的子节点

获取父节点和兄弟节点

 练习(轮播图)


正则语法

. 表示任意字符

在正则表达式中使用\作为转义字符

\. 表示 .

var reg=/\./;
        console.log(reg);//   /\./
        console.log(reg.test("basd"));//false

\\  表示 \

reg=/\\/;
        console.log(reg.test("b.\\"));//true
        console.log("b.\\");//b.\

注意:使用构造函数时,由于它的参数是一个字符串,而\是字符串中的转义字符,如果要使用\\则需要使用\\来代替

reg=new RegExp("\\.");
        console.log(reg);//     /\./

        reg=new RegExp("\.");
        console.log(reg);//        /./

\w任意数字,字母,_     [A-z 0-9]
\W除了任意数字,字母,_   [^A-z 0-9]
\s空格
\S除了空格
\d任意数字  [0-9]
\D除了数字   [^0-9]
\b单词边界
\B除了单词边界
reg=/\w/;
        console.log(reg.test("abc"));//true
        console.log(reg.test("!@!@#"));//false

        reg=/\s/;
        console.log(reg.test("12 3"));//true
        console.log(reg.test("123"));//false
        console.log(reg.test("    "));//true

        reg=/\S/;
        console.log(reg.test("123"));//true
        console.log(reg.test("    "));//false
        console.log(reg.test("12 3"));//true

//      创建一个正则表达式检查一个字符串是否还有单词child
        reg=/\bchild\b/;

        console.log(reg.test("hello child"));

练习

对用户名去除前边和后边的空格

// 接受一个用户的输入
        // var str=prompt("请输入您的用户名");
        var str="          he  llo      ";
//      去除字符串中的空格
//      去除空格就是使用“”来替代空格
        console.log(str);
        // str=str.replace(/\s/g,"");
        // 缺点:会把单词与单词之间的空格一块省去
        // 所以有以下方法
        // 去除开头的空格
        str=str.replace(/^\s*/,"");
        // 去除结尾的空格
        str=str.replace(/\s*$/,"");

        console.log(str);

邮件的正则

// 任意字母数字下划线  .  任意字母数字下划线  @  
        // 任意字母数字  .  任意字母(2-5位)  . 任意字母(2-5位)
        // \w{3,}  .  (\.\w+)*   @  [A-z0-9]+  .  (\.[A-z]{2,5}){1,2}
        var emailReg=/^\w{3,}(\.\w+)*@[A-z0-9]+(\.[A-z]{2,5}){1,2}$/;

        var email="abc@abc.com";

        console.log(emailReg.test(email));

DOM

简介

全称Document Object Model文档对象模型

文档:整个的HTML网页文档

对象:将网页中的每一个部分转换位了一个对象

模型:使用模型来表示对象之间的关系,这样方便我们获取对象

 节点

Node——构成HTML文档最基本的单元

常用节点分为4类

  1. 文档节点:整个HTML文档
  2. 元素节点:HTML文档中的HTML标签
  3. 属性节点:元素的属性
  4. 文本属性:HTML标签中的文本内容

<body>
    <!-- 浏览器已经为我们提供文档节点对象,这个对象的window属性
    可以在页面中直接使用,文档节点代表的是整个网页 -->
    <button id="btn">我是一个按钮</button>
    <script>
        // console.log(document);

        // 获取到button对象
        var btn=document.getElementById("btn");

        // 修改按钮的文字
        btn.innerHTML="I'm button";
    </script>
</body>

事件

用户和浏览器之间的交互行为,比如:点击按钮,鼠标移动,关闭窗口等等

<!--  这种写法我们称为结构和行为耦合,不方便维护,不推荐使用-->
    <button id="btn" onclick="alert('讨厌,点我干嘛');">我是一个按钮</button>

可以为按钮的对应事件绑定处理函数的形式来响应事件,这样当事件被处罚是,其对应的函数将会被调用,像这样为单击事件绑定的函数,我们称为单机响应函数

<body>
    <button id="btn">我是一个按钮</button>
    <script>
        //获取按钮对象
        var btn=document.getElementById("btn");
        // 绑定单击事件
        btn.onclick=function(){
            alert("你还点~~~~~~~");
        }

    </script>
</body>

文档的加载

  • 将js代码编写到页面的下部就是未来可以在页面加载完毕以后再执行js代码
  • onload事件会在整个页面加载完成之后才出发,为window绑定一个onload事件,这样可以确保我们的代码执行时所有的DOM对象已经加载完毕了
  • 浏览器在加载一个页面时,是按照自上向下的顺序加载的,读取到一行就运行一行,如果将script标签写到页面的上边,在代码执行时,页面还没有加载,页面没有加载Dom对象也没有加载,会导致无法获取到Dom对象
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
    <script>
      window.onload = function () {
        // 获取id为btn的按钮
        var btn = document.getElementById("btn");
        //      为按钮绑定一个单机响应函数
        btn.onclick = function () {
          alert("hello");
        };
      };
    </script>
  </head>
  <body>
    <button id="btn">点我一下</button>
  </body>
</html>

dom查询

获取元素节点

  • 通过document对象调用
getElementById()通过id属性获取一个元素节点对象
getElementsByTagName()通过标签名获取一组元素节点对象
getElementsByName()通过name属性获取一组元素节点对象

innerHTML用于获取元素内部的HTML代码

如果需要读取元素节点属性,直接使用元素.属性名

例子:元素.id    元素.name   元素.value

注意:class属性不能采用这种方式,读取class属性时需要使用   元素.className

 获取元素节点的子节点

  • 通过具体的元素节点调用

getElementByTagName()

方法,返回当前节点的指定标签名代节点

childNodes

属性,表示当前节点的所有子节点

childNodes属性会获取包括文本节点在内的所有节点,根据DOM标签间的空白也会当成文本节点

注意:在IE8及以下的浏览器中,不会将空白文本当成子节点

children

属性,可以获取当前元素的所有子元素

firstChild

属性,表示当前节点的第一个子节点(包括空白文本节点)

firstElementChild

获取当前元素的第一个子元素

不支持IE8以下的浏览器

lastChild

属性,表示当前节点的最后一个子节点

获取父节点和兄弟节点

  • 通过具体的节点调用

parentNode

属性,表示当前节点的父节点

previousSibling

属性,表示当前节点的前一个兄弟节点

nextSibling

属性,表示当前节点的后一个兄弟节点

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
    <script>
      window.onload = function () {
        // 定义一个函数,专门用来为指定元素绑定单击响应函数
        // 参数:
        // idStr   要绑定单击响应函数的对象的id属性值
        // fun     事件的回调函数,当单击元素是,该函数将会被触发
        function myClick(idStr, fun) {
          var btn = document.getElementById(idStr);
          btn.onclick = fun;
        }

        // 为id为btn01的按钮绑定一个单击响应函数
        var btn01 = document.getElementById("btn01");
        btn01.onclick = function () {
          // alert("hello");
          // 查找#bj节点
          var bj = document.getElementById("bj");
          // 打印bj
          //   alert(bj);//[object HTMLLIElement]
          // innerHTML,通过这个属性可以获取到元素内部的html代码
          alert(bj.innerHTML);
        };

        var btn02 = document.getElementById("btn02");
        btn02.onclick = function () {
          // 查找所有li节点
          // getElementByTagName()可以根据标签名来获取一组元素节点对象
          // 这个方法会给我们返回一个类数组对象,所有查询到的元素会封装到对象中
          var lis = document.getElementsByTagName("li");
          // 打印lis
          // alert(lis.length);

          // 变量lis
          for (var i = 0; i < lis.length; i++) {
            alert(lis[i].innerHTML);
          }
        };

        var btn03 = Document.getElementById("btn03");
        btn03.onclick = function () {
          // 查找name=gender的所有节点
          var inputs = document.getElementsByName("gender");

          // alert(inputs.length);
          for (var i = 0; i < inputs.length; i++) {
            // alert(inputs[i].innerHTML);
            //              innerHTML用于获取元素内部的HTML代码的
            //              对于自结束标签,这个属性没有意义
            // 如果读取元素节点属性
            // 直接使用  元素.属性名
            alert(inputs[i].className);
          }
        };

        var btn04 = document.getElementById("btn04");
        btn04.onclick = function () {
          // 获取id为city都元素
          var city = document.getElementById("city");
          // 查找#city下所有li节点
          var lis = city.getElementsByTagName("li");
          for (var i = 0; i < lis.lenth; i++) {
            alert(lis[i].innerHTML);
          }
        };

        var btn05 = document.getElementById("btn05");
        btn05.onclick = function () {
          var city = document.getElementById("city");
          // 返回#city的所有子节点
          var cns = city.childNodes;
          // alert(cns.length);
          for (var i = 0; i < cns.length; i++) {
            alert(cns[i]);
          }

          var cns2 = city.children;
          alert(cns2.length);
        };

        var btn06 = document.getElementById("btn06");
        btn06.onclick = function () {
          // 获取id为phone的元素
          var phone = document.getElementById("phone");
          // 返回#phone的第一个子节点
          phone.childNodes[0];

          var fir = phone.firstChild;
          alert(fir);
        };
        //为id为btn07的按钮绑定一个单击响应函数
        myClick("btn07", function () {
          //获取id为bj的节点
          var bj = document.getElementById("bj");

          //返回#bj的父节点
          var pn = bj.parentNode;

          alert(pn.innerHTML);
        });

        //为id为btn08的按钮绑定一个单击响应函数
        myClick("btn08", function () {
          //获取id为android的元素
          var and = document.getElementById("android");

          //返回#android的前一个兄弟节点(也可能获取到空白的文本)
          var ps = and.previousSibling;

          //previousElementSibling获取前一个兄弟元素,IE8及以下不支持
          //var pe = and.previousElementSibling;

          alert(ps);
        });

        //读取#username的value属性值
        myClick("btn09", function () {
          //获取id为username的元素
          var um = document.getElementById("username");
          //读取um的value属性值
          //文本框的value属性值,就是文本框中填写的内容
          alert(um.value);
        });

        //设置#username的value属性值
        myClick("btn10", function () {
          //获取id为username的元素
          var um = document.getElementById("username");

          um.value = "今天天气真不错~~~";
        });

        //返回#bj的文本值
        myClick("btn11", function () {
          //获取id为bj的元素
          var bj = document.getElementById("bj");

          //alert(bj.innerHTML);
          //alert(bj.innerText);

          //获取bj中的文本节点
          /*var fc = bj.firstChild;
					alert(fc.nodeValue);*/

          alert(bj.firstChild.nodeValue);
        });
      };
    </script>
  </head>
  <body>
    <div class="total">
      <div class="inner">
        <p>你喜欢哪个城市?</p>
        <ul id="city">
          <li id="bj">北京</li>
          <li>上海</li>
          <li>东京</li>
          <li>首尔</li>
        </ul>
        <br />
        <br />
        <p>你喜欢哪款单机游戏?</p>
        <ul id="game">
          <li class="rl">红警</li>
          <li>实况</li>
          <li>极品飞车</li>
          <li>魔兽</li>
        </ul>
        <br />
        <br />
        <p>你手机的操作系统是?</p>
        <ul id="phone">
          <li>IOS</li>
          <li id="android">Android</li>
          <li>Windows Phone</li>
        </ul>
      </div>
      <div class="inner">
        gender:
        <input class="hello" type="radio" name="gender" value="male" />
        Male
        <input class="hello" type="radio" name="gender" value="female" />
        Female
        <br />
        <br />
        name:
        <input type="text" name="name" id="username" value="abcde" />
      </div>
    </div>
    <div id="btnList">
      <div><button id="btn01">查找#bj节点</button></div>
      <div><button id="btn02">查找所有li节点</button></div>
      <div><button id="btn03">查找name=gender的所有节点</button></div>
      <div><button id="btn04">查找#city下所有li节点</button></div>
      <div><button id="btn05">返回#city的所有子节点</button></div>
      <div><button id="btn06">返回#phone的第一个子节点</button></div>
      <div><button id="btn07">返回#bj的父节点</button></div>
      <div><button id="btn08">返回#android的前一个兄弟节点</button></div>
      <div><button id="btn09">返回#username的value属性值</button></div>
      <div><button id="btn10">设置#username的value属性值</button></div>
      <div><button id="btn11">返回#bj的文本值</button></div>
    </div>
  </body>
</html>

 练习(轮播图)

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
    <style>
      /* 去除原本样式 */
      * {
        margin: 0;
        padding: 0;
      }
      /* 原本像素1000*2000,现在都除以2 */
      img {
        width: 200px;
        height: 400px;
      }
      #outer {
        width: 200px;
        /* 垂直居中 */
        margin: 50px auto;
        /* 四个方向都加边界 */
        padding: 10px;

        background-color: blanchedalmond;
        /* 设置文本居中 */
        text-align: center;
      }
    </style>
    <script>
        window.onload = function () {
          // 点击按钮切换图片
          // 获取两个按钮
          var prev = document.getElementById("prev");
          var next = document.getElementById("next");

          // 要切换为两个按钮绑定单击响应函数
          var img=document.getElementsByTagName("img")[0];
          // 创建一个数组,用来保存图片的路径
          var imgArr=["img/1.jpg","img/2.jpg","img/3.jpg","img/4.jpg","img/5.jpg"];

          var index=0;
//      切换图片就是修改img的src属性

//      获取id为info的p元素
            var info=document.getElementById("info");


              //      要修改一个元素的属性元素   元素.属性=属性值
          // 分别为两个按钮绑定单击响应函数
          prev.onclick = function () {
              // 切换到下一张,索引自减
              index--;
              // 判断index是否小于0
          if(index<0){
              index=imgArr.length-1;
          }
          img.src=imgArr[index];
        //   当点击按钮以后,重新设置信息
        //      设置提示文字
        info.innerHTML="一共"+imgArr.length+"张图片,当前第"+(index+1)+"张";


      };
          next.onclick = function () {
              index++;
              if(index>imgArr.length-1){
                index=0;
              }
              img.src=imgArr[index];

              //      设置提示文字
            info.innerHTML="一共"+imgArr.length+"张图片,当前第"+(index+1)+"张";

          };
      };
    </script>
  </head>
  <body>
    <div id="outer">
        <p id="info">一共5张图片,当前第1张</p>
      <img src="img/1.jpg" alt="1" />
      <button id="prev">上一张</button>
      <button id="next">下一张</button>
    </div>
  </body>
</html>

 效果图:

 

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值