第四周第三天笔记

1.复习昨天的知识

  • 创建数组的两种方式
    • var ary=[1,2,3];字面量方式创建;
    • var ary2=new Array(1,2,3);实例创建;
  • 给数组末尾增加一项
    • push();
    • ary[ary.length]==xxx;
    • ary.splice(ary.length,0,xxx);
  • 删除数组最后一项
    • pop()
    • ary.length--; ary.length-=1; ary.length=ary.length-1;
    • ary.splice(ary.length-1,1);
  • 如何实现克隆
    • ary.slice();或是ary.slice(0);
    • ary.concat();不添加参数;
    • ary.splice(0);注:如果用splice()进行克隆,0不能省略;
    • for循环也可以实现,但for循环是循环,不是方法;
  • n++与++n的区别:
<script>
    var n=15;
    alert(++n+10);//弹出的值为26;++n,自身先累加,累加后的结果参与运算;
    alert(10+(n++));// 弹出的值为25;n++,先运算,后累加;
    alert(n++);//弹出的值为15;n变成16
    alert(++n);//弹出的值为16;n变成16
    var m=++n;//结果为m是16,n是16;先加1,后赋值;
    var z=n++;//结果为z是15,n是16;先赋值,后加1;
</script>

2.日期对象

  • 通过日期对象获得的值是数字类型;
  • 日期对象的定义:var odate=new Date();指:获得当前电脑系统的时间;
  • 日期对象的方法:
    • get/setFullYear():返回/设置年,四位数;
    • get/setYear():返回/设置年,两位数;
    • get/setMonth():返回/设置月;
    • get/setDate():返回/设置日;
    • getDay():返回星期数,是0-6;0指星期日,6值星期六,配合数组运用;
    • get/setHours():返回/设置小时;
    • get/setMinutes():返回/设置分钟;
    • get/setSeconds():返回/设置秒钟;
    • get/setTime():返回/设置毫秒数,距离1970年1月1日0时0分0秒的毫秒数;
  • 方法阐述:
    • 获得当前电脑系统的时间:var odate=new Date();即定义即获取时间;
    • 设置未来的年月日时分秒格式:var odate1=new Date("2018/9/30 18:22:03");或var odate1=new Date(2018,9,30,18,22,3);
    • 设置当前电脑系统的年/月/日:
     var odate=new Date();
      odate.setMonth(odate.getMonth()+1);//改变系统的月份;
      console.log(odate.getMonth());
    
    • getDay():返回星期数,是0-6之间的数字;0指星期日,6值星期六,配合数组运用;
    <script>
        var odate=new Date();
        var m=odate.getDay();//m值为0;
        var ary=["星期日","星期一","星期二","星期三","星期四","星期五","星期六"];
        document.write("今天是:"+ary[m]);
    </script>
    
    • get/setTime():返回/设置毫秒数,距离1970年1月1日0时0分0秒(格林尼治时间)的毫秒数;
      • 例:使当前时间推迟2小时;推迟n个小时,即加上n*60*60*1000;
       <script>
           var odate=new Date();
           console.log(odate);
           odate.setTime(odate.getTime()+2*60*60*1000);
           console.log(odate);
       </script>
      
      
  • 实例1:制作一个时钟,封装一个函数,将1-9变成01-09;
    • 知识点:解决setInterval开始执行时的延迟问题,可以在执行setInterval前,执行一次函数;
<script>
    var odiv=document.getElementsByTagName("div")[0];
    //封装一个函数,用于将0-9之间的数字转换为两位数的字符串;
    //需求:将数字转换为字符串,所以实参为数字,返回值为字符串;
    var str;
    function todou(n) {
        if(n>=0&&n<10){
            str="0"+n;//数字与字符串进行加法,则使两者进行拼接;
        }else{
            str=""+n;
            //目的:一个函数输出的类型必须一样,当数字输入后,输出的全为字符串
            //空字符串与数字拼接,达到数字转字符串的效果;
        }
        return str;
    }
    function clock() {
        var odate=new Date();
        var h=odate.getHours();
        var m=odate.getMinutes();
        var s=odate.getSeconds();
        var str=todou(h)+"时"+todou(m)+"分"+todou(s)+"秒";
        odiv.innerHTML=str;
    }
    clock();//为了解决定时器的延迟性,首先设置执行函数一次;
    setInterval(clock,1000);//定时器的缺点是,在进行第一次执行函数时,也会延迟1000毫秒
</script>
  • 实例2:制作一个距离未来指定时间倒计时时钟,知识点:格林尼治时间;
<body>
<div>距离玩耍时间还有:&nbsp;<span>00天&nbsp;&nbsp;00:00:00</span></div>
<script>
    var ospan=document.getElementsByTagName("span")[0];
    function todou(n) {
        return n>=0 && n<10?"0"+n:""+n;//三目格式添加if条件语句
    }
    function countDown(){
        var odate=new Date();
        var tomdate=new Date("2018/7/29 20:00:00");
        var s=tomdate.getTime()-odate.getTime();
        //可以写成var s=new Date("2018/7/29 23:00:00")-new Date();
        var date=Math.floor(s/(24*60*60*1000));
        s%=(24*60*60*1000);
        var h=Math.floor(s/(60*60*1000));
        s%=(60*60*1000);
        var m=Math.floor(s/(60*1000));
        s%=(60*1000);
        var s=Math.floor(s/1000);
        var str=todou(date)+"天"+"&nbsp;&nbsp;"+todou(h)+":"+todou(m)+":"+todou(s);
        ospan.innerHTML=str;
    }
    countDown();
    setInterval(countDown,1000);
</script>
</body>

3.DOM基本知识

  • DOM树,由一大堆的元素和标签组成;所以,DOM就是用来操作页面中的标签的;

  • DOM节点:

    • 元素节点:HTML中各元素,如body,head,p,span,ul,li等元素;
    • 文本节点:文本,如p元素中的文本;
    • 注释节点:注释文本;
    • 文档节点:document节点;
  • DOM节点属性:

    • nodeName属性:节点的名称,只读;
    • nodeValue属性:节点的值,可修改;
    • nodeType属性:节点类型,只读;
    • 节点类型的属性:
    节点类型 nodeName nodeValue nodeType
    元素节点 大写的标签名 null 1
    文本节点 #text 文本内容 3
    注释节点 #comment 注释内容 8
    文档节点 #document null 9
  • DOM中的元素节点的获取方式有以下几种:

    • id:document.getElementById("id");
    • tagname:document.getElementsByTagName("标签名");
    • classname:document.getElementsByClassName("class名");
    • name:document.getElementsByName("name");
    • querySelector(实参):获取一个元素; 实参可以是:div,.div1,#div1,用于移动端;兼容性不好,IE7不支持;
    • querySelectorAll():获取一数组元素,兼容性不好;
  • 遍历节点树:

    • elementNode.childNodes: 返回一个数组,这个数组由给定元素节点的子节点构成;若不存在子节点则返回NodeList[];
    • elementNode.children:可以拿到当前元素下的所有子元素节点,但是在IE8下,如果有注释,则作为元素节点返回,不兼容性;只有IE8不兼容,其他的都兼容;
    • elementNode.firstChild: 返回元素节点下的第一个子节点; 若不存在,则返回null;
    • elementNode.lastChild: 返回元素节点下的最后一个子节点; 若不存在,则返回null;
    • nodeObject.parentNode: 返回一个给定子节点的父节点; 若不存在,则返回null;
    • nodeObject.nextSibling: 返回给定子节点的下一个弟弟子节点; 若不存在,则返回null;
    • nodeObject.previousSibling返回给定子节点的上一个哥哥子节点; 若不存在,则返回null;
  • 节点树:

    • childNodes: 获取元素节点的所有子节点
      • 语法:elementNode.childNodes
      • 返回值:元素节点的所有子节点构成的数组集合;
      • 若选定元素无子节点,则返回NodeList[];
      • 兼容性不好,如下代码中ul的子节点长度在不同浏览器中不同,其中在IE7,IE8浏览器中子节点长度为3,不存在空白节点;而在firefox/chrome/opera/safari浏览器中长度为7;会存在空白节点;
           <ul>(空白节点)
             <li>meihao</li>(空白节点)
             <li>tiankong</li>(空白节点)
            <li>yuer</li>(空白节点)
          </ul>
      
      • 封装一个去除空白节点的函数,使所有浏览器均支持;
       <body>
       <ul>
           <li></li>
           <li></li>
           <li></li>
           <li></li>
           <li></li>
       </ul>
       <script>
           //需求:将一个元素节点子节点中去除空白节点,返回一个只有元素子节点的数组集合;
           //思路:函数实参为元素节点,返回值为去除空白子节点后的子节点数组集合
           //判断条件:判断子节点的节点类型,空白节点为文本节点,节点类型为3,元素节点的节点类型为1;
           var oul=document.getElementsByTagName("ul")[0];
           function tom(objnode) {
               var achild=objnode.childNodes;
               var ary=[];
               for(var i=0;i<achild.length; i++){
                   if(achild[i].nodeType==1){
                       ary.push(achild[i]);//将元素添加到数组中;
                   }
               }
               return ary;//返回值为数组;
           }
           var ma=tom(oul);
           ma[0].innerHTML="天空";//获得第一个li元素,添加内容;
           console.log(ma);
       </script>
       </body>
      
    • nodeObject.previousSibling返回给定子节点的上一个哥哥子节点(包括空白节点,注释节点等); 若不存在,则返回null;
    • nodeObject.previousElementSibling: 返回给定子节点的上一个哥哥元素子节点,兼容性不好,IE浏览器不支持;
    • 封装一个函数,获取当前元素节点的上一个哥哥元素节点。其中判断循环条件为 pre && pre.nodeType!==1;
    <body>
    <div class="div-1">内容1</div>
    <div class="div-2">内容2</div>
    <div class="div-3">内容3</div>
    <div class="div-4">内容4</div>
    <div class="div-5">内容5</div>
    <script>
        var aDiv=document.getElementsByTagName("div");
        //需求:获取 当前元素节点 的上一个哥哥 元素节点
        //思路: 实参:当前元素节点; 返回值:上一个哥哥元素节点;
        //第一步:判断该浏览器下是否支持previousElementSibling方式,如果支持,若支持,则返回元素节点,为true,执行if成立下的语句;如果不存在,则返回undefined,if判断后为假,则执行后面代码;
        //第二步:当不存在时,利用while循环查找当前元素的上一个节点类型是否为元素节点;如果不是,重新赋值,再判断;直到上一个子节点不存在,则返回null,停止循环;返回null;
        function preEle(curEle) {
            //1.判断:如果对象支持高级属性,直接使用系统提供的高级属性;
            if(curEle.previousElementSibling){
                return curEle.previousElementSibling;//此时return的作用:1)返回值;2)阻断程序执行;
            }
            //2.如果系统不支持高级属性,则进行下列代码设置;
            var pre=curEle.previousSibling;
            while(pre && pre.nodeType!==1){//判断pre是否存在,不存在即为null,为false;跳出循环;
                pre=pre.previousSibling;
            }
            return pre;
        }
        var pe=preEle(aDiv[2]);
        console.log(pe.innerHTML);
    </script>
    
  • 判断属性是否存在的方法:

    • in : "属性名" in 对象; 如果存在该属性,则返回true;如果不存在,则返回false;
    • "." : 对象.属性名; 如果存在该属性,则返回该属性值,如果不存在,则返回undefined;
     var aa=document.getElementsByTagName("a")[0];
       console.log("href" in aa);//打印出true;
       alert(aa.mass);//返回值为undefined;
    
  • 可视区域的宽高

    • 浏览器可视区域的宽高的兼容处理:不包括滚动条;默认17px滚动条;
      • 可视区域的宽度:document.documentElement.clientWidth || document.body.clientWidth;
      • 可视区域的高度:document.documentElement.clientHeight || document.body.cilentHeight;
      • 兼容性问题分析:
        • document.documentElement.clientWidth/Height:除了IE5浏览器不支持,其他的都支持;
        • document.body.clientWidth/Heigth:在IE5浏览器中作为浏览器的可视区域宽高获取;
        • document.body.clientWidth
          • 在IE8以上浏览器中,与document.documentElement.clientWidth差16px,即body元素默认的margin值(8px);
          • 在IE7浏览器中,与document.documentElement.clientWidth差20px,即body元素默认的margin值(10px);
          • 在IE5浏览器中作为浏览器的可视区域宽度获取;document.documentElement.clientWidth失效;
        • document.body.clientHeight
          • 在IE7及以上浏览器中,用于获取body标签的高度;
          • 在IE5浏览器中,作为浏览器的可视区域高度获取;
    • HTML中body标签的可视区域宽高
      • body标签的可视区域宽度:document.body.clientWidth;指body标签的宽度;
      • body标签的可视区域高度:document.body.clientHeight;除IE5以外,均指body标签的高度;
    • window.innerWidth/Height
      • 作用:IE9及以上浏览器支持;与document.documentElement.Width/Height的唯一区别是,它包含滚动条,若页面生成滚动条,则包含滚动条的默认17px,而document.documentElement.Width不包含滚动条;
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,607评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,047评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,496评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,405评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,400评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,479评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,883评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,535评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,743评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,544评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,612评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,309评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,881评论 3 306
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,891评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,136评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,783评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,316评论 2 342

推荐阅读更多精彩内容

  • 单例模式 适用场景:可能会在场景中使用到对象,但只有一个实例,加载时并不主动创建,需要时才创建 最常见的单例模式,...
    Obeing阅读 2,050评论 1 10
  • 概要 64学时 3.5学分 章节安排 电子商务网站概况 HTML5+CSS3 JavaScript Node 电子...
    阿啊阿吖丁阅读 9,071评论 0 3
  • 第3章 基本概念 3.1 语法 3.2 关键字和保留字 3.3 变量 3.4 数据类型 5种简单数据类型:Unde...
    RickCole阅读 5,093评论 0 21
  • 一、JS前言 (1)认识JS 也许你已经了解HTML标记(也称为结构),知道了CSS样式(也称为表示),会使用HT...
    凛0_0阅读 2,752评论 0 8
  • HTML 5 HTML5概述 因特网上的信息是以网页的形式展示给用户的,因此网页是网络信息传递的载体。网页文件是用...
    阿啊阿吖丁阅读 3,815评论 0 0