05-javascript基础学习笔记

1.节点的操作###

根据后台返还的数据来创建节点,之前写的操作:写好页面结构,通过dom树获取节点,再对获取的节点进行操作,今天学习一下dom节点的创建、添加、删除和插入

首先获取父元素
var body = document.getElementsByTagName("body")[0];

  • 创建并添加节点
    /* 1. 添加节点的相关操作*/
    var btnAdd = document.getElementsByTagName("button")[0];
    var box;
    btnAdd.onclick = function () {
        /*1.2 创建节点(一般通过document来创建)*/
        box = document.createElement("div");
        /*设置属性*/
        box.style.width = 100 + "px";
        box.style.height = 100 + "px";
        box.style.background = "yellow";
        /* 1.3 添加节点(一般通过父节点来添加)*/
        body.appendChild(box);
    };
  • 删除节点
 /* 2. 删除节点的相关操作,一半通过父节点来操作*/
    var btnDel = document.getElementsByTagName("button")[1];
    btnDel.onclick= function () {
        body.removeChild(box);
    };
  • 插入节点
    /* 3. 插入节点的相关操作,一般通过父节点来操作*/
    var btnIns = document.getElementsByTagName("button")[2];
    btnIns.onclick = function () {
        //创建节点
        var box1 = document.createElement("div");

        //设置属性
        box1.style.width = 100+"px";
        box1.style.height = 100+"px";
        box1.style.background = "pink";

        //插入节点,也是通过父节点
        //第一个参数表示要插入的节点,第二个表示被插入的节点
        body.insertBefore(box1,box);
    };
  • 节点的获取(子节点、父节点、兄弟节点)
    子节点的获取(返回伪数组)
获取box下面的子节点,childNodes获取文本节点,但是我们一般不需要文本节点,需要标签节点
var  rst = box.childNodes;

我们一般获取子节点通过children获取,因为我们需要的是标签节点
    var myChildren = box.children;
    console.log(myChildren.length);
  • 兄弟节点
兼容性问题
                    
    //1.获取btn1
    var btn1 = document.getElementById("btn1");
    //2.获取兄弟节点
    /* nextElementSibling:获取标签元素,一般浏览器可以实现对应的效果
     * IE浏览器不能有对应的效果,但是nextSibling可以在ie获取标签元素
      * 所以我们需要兼容*/
    var brotherSym = btn1.nextElementSibling||btn1.nextSibling;
    console.log(brotherSym);
  • 父节点
    //1.获取btn1
    var btn1 = document.getElementById("btn1");
    //2.获取父节点
    var parentSym = btn1. parentNode;
    console.log(parentSym);

2.date的认识###

1.创建时间对象,表示当前的时间
var myDate = new Date();

2.当前时间的时间戳,获取的是1970年1月1日开始的毫秒数,用来纪念unix诞生的时间
var minS = myDate.getTime();

3.32位最大只能存储2的32次方,所以32位电脑上date对象最大只能获取到2038年之前的时间

4.定义自己的时间戳
var myDate = new Date("2017/07/03 18:20:20");

5.date对象的相关方法

//    1.创建时间对象
    var myDate = new Date();
//    2.1获取当前年份
    var year = myDate.getFullYear();
//    2.2获取月份,获取的值是0到11
    var month = myDate.getMonth();
//    2.3获取日期,0代表周末,其他均正常
    var day = myDate.getDate();
//    2.4获取星期
    var weekDay = myDate.getDay();
//    2.5获取每小时
    var hour = myDate.getHours();
//    2.6获取每分钟
    var min = myDate.getMinutes();
//    2.7获取每秒
    var second = myDate.getSeconds();
//    2.8获取毫秒
    var mins = myDate.getMilliseconds();

3.js三部分###

1.ECMA规范
2.DOM(文档对象模型)
3.BOM(浏览器对象模型)

border边框none与0###

界面上所有内容都是渲染出来的,当边框设置为none时不会渲染,为0时会渲染

this###

一般放在事件指令中,表示谁触发了这个事件,一般是事件源

事件域###

当一个动态节点添加以后,动态节点所在的{}内就是他的事件域

for循环中的i++与++i###

for(初始值;终止值;变化){
    //循环执行代码
}
  • 第一次循环中i++与++i没区别
  • 所有语言在运行中最终都会转为机器语言(汇编语言),i++会在机器语言中创建一个中间变量,++i不会,所以++i性能高于i++
  • 人们一直都在用i++,当发现++i性能略高于i++时,已经养成了习惯。所以总是使用i++

九宫格算法(掌握)###

  • 行号和列号的计算
  • 动态创建节点应用

下面是动态创建九宫格的代码

CSS代码:

        #box{
            position: relative;
        }
        /* 为了避免以后获取同样的标签的时候写很多对应的属性的设置,
        我们最好把这些属性设置抽取成一个类用来表示这些属性*/
        .newBox{
            width: 100px;
            height: 100px;
            position: absolute;
            background: yellow;
            border-radius: 10px;
            display: inline-block;
        }

HTML代码:

<button>添加</button>
<button>删除</button>
<div id="box">

</div>

JS代码:


    //1.获取按钮与父节点
    var btn = document.getElementsByTagName("button");
    var box = document.getElementById("box");
    //2.操控按钮
    //2.1 创建一个值用来记录索引,也可以叫做记录盒子的个数
    var index = 0;
    btn[0].onclick = function () {
        index++;
        //2.1创建盒子
        var div = document.createElement("div");
        //2.2设置属性 — 通过类名
        div.className = "newBox";
        div.innerHTML = index;

        //2.3 设置盒子的位置
        //2.3.1 确定行号和列号
        var col = (index-1)%3;
        console.log(col);
        var row = parseInt((index-1)/3);
        div.style.left = col * (100+10)+"px";
        div.style.top = row * (100+10)+"px";

        console.log(div);

        //2.4添加节点
        box.appendChild(div);
    }

    //3. 删除盒子
    btn[1].onclick= function () {
        if(box.children.length-1<0)return;
        //3.1删除节点
        box.removeChild(box.children[index-1]);
        //3.2 为了让每次点击都可以删除最后一个节点,我们让索引自减
        index--;
    };

发布微博###

创建ul时,在点击事件外面创建

  • 点击按钮(插入)
    1.判断输入框中内容是否为空,是的话提示为空,否则再添加li节点
    2.添加节点的时候,需要判断ul中是否有节点,没有的话直接添加,有的话插入到第一个前面
  • 点击按钮(删除)
    1.删除li,获取a标签,并对a标签数组进行遍历,分别添加点击事件。当点击时则删除对应的li

下面是代码

CSS代码:


        *{
            margin: 0;
            padding: 0;
        }
        #box{
            border: 1px solid #000;
            padding: 10px;
            width: 600px;
            height: 600px;
            margin: 100px auto;
            text-align: center;
        }
        #txta{
            width: 490px;
            height: 200px;
            resize: none;
            border: 1px solid #000;
        }
        #box ul{
            width: 460px;
            margin: 0 auto;
        }
        #box ul li{
            list-style:none;
            border-bottom: 1px dashed black;
            height: 30px;
            line-height:30px;
            text-align: left;
        }
        #box ul li a {
            float: right;
            cursor: pointer;
        }

HTML代码:

<div id="box">
    发布微博
    <textarea name="" id="txta" cols="30" rows="10"></textarea>
    <button>发布</button>
</div>

JS代码:


    //获取标签
    var parentBox = document.getElementById("box");
    var textArea = document.getElementById("txta");
    var btn = document.getElementsByTagName("button")[0];

    //创建ul标签
    var myUl = document.createElement("ul");
    parentBox.appendChild(myUl);

    //点击发布按钮响应事件
    btn.onclick = function () {
        //获取要发布的内容
        var content = textArea.value;

        //如果要发布的内容为空,则返回
        if(content==""){
            alert("请输入要发布的内容");
            return;
        }else{
            //如果发布的内容有值,那么就创建新节点
            var li = document.createElement("li");
            //给新节点添加属性与内部内容
            li.innerHTML = content + "<a>删除</a>";
            //判断新创建节点是否为第一条,如果是,直接添加。如果不是,则插入到首行
            if(myUl.children.length==0){
                myUl.appendChild(li);
            }else{
                myUl.insertBefore(li,myUl.children[0]);
            }

        }

        //删除记录操作,一定写在点击事件里面,因为a标签需要动态获取,如果在事件外,那么就只能获取一次。但是a标签是可以多次添加,会导致无法删除
        var as = document.getElementsByTagName("a");
        for(let i = 0; i < as.length; ++i){
            as[i].onclick= function () {
                //点击删除按钮后,从ul上删除对应的li,相当于删除a标签的父节点
                myUl.removeChild(this.parentNode);
            }
        }

        textArea.value="";
    };

通过类名获取标签###

通过自定义封装一个工具类函数来获取标签,了解即可,需要用的时候会写

下面是自己练习的一个封装方法
HTML代码:

<div id="box">
    <button class="btn">btn按钮</button>
    <button class="btn">btn按钮</button>
    <button class="btn">btn按钮</button>
    <button class="btn submit">btn按钮</button>
    <button>按钮</button>
</div>

JS代码:


    var box = document.getElementById("box");
    function getSymByClassName(dom,className){
        if(dom.getElementsByClassName){
            return dom.getElementsByClassName(className);
        }
        var symArr = dom.getElementsByTagName("*");
        var arr = [];
        for(var i = 0; i<symArr.length; i++){
            var symClassNameArr = symArr[i].className.split(" ");
            for(var j = 0; j < symClassNameArr.length; j++){
                if(symClassNameArr[j] == className)
                    arr.push(symArr[i]);
            }
        }
        return arr;
    }
    var rst = getSymByClassName(box,"btn");
    for(var i = 0; i < rst.length; i++){
        rst[i].style.backgroundColor = "green";
    }

封装一个直接获取ID标签的方法:

function $(tag){
  return document.getElementById(tag);
}

transform###

基于默认值进行变化
rotateX(angle) 定义沿着 X 轴的 3D 旋转。
rotateY(angle) 定义沿着 Y 轴的 3D 旋转。
rotateZ(angle) 定义沿着 Z 轴的 3D 旋转。

写了个钟表的实现

CSS代码:


        *{
            margin: 0;
            padding: 0;
            border: none;
        }
        .clock{
            width: 600px;
            height: 600px;
            margin: 100px auto;
            position: relative;
            background: url("images/clockImages/clock.jpg") no-repeat;
        }
        .hour,.minute,.second{
            width: 600px;
            height: 600px;
            position: absolute;
        }
        .hour{
            background: url("images/clockImages/hour.png") no-repeat center;
        }
        .minute{
            background: url("images/clockImages/minute.png") no-repeat center;
        }
        .second{
            background: url("images/clockImages/second.png") no-repeat center;
        }

HTML代码:

<div id="clock" class="clock">
    <div class="hour"></div>
    <div class="minute"></div>
    <div class="second"></div>
</div>

JS代码:


    /* 1.获取标签 */
    var h = document.getElementsByClassName("hour")[0];
    var m = document.getElementsByClassName("minute")[0];
    var s = document.getElementsByClassName("second")[0];
    /* 2.操控标签,标签旋转 */
    /* 为了每时每刻都获取对应时间,我们需要使用定时器 */

    /* 创建时间对象 */
    var timer = setInterval(function () {
        var myDate = new Date();
        /* 2.1 获取毫秒 */
        var minS = myDate.getMinutes();
        /* 每秒旋转6* */
        var sec = myDate.getSeconds()+minS/1000;
        console.log(sec);
        /* 每分旋转6* */
        var min = myDate.getMinutes()+sec/60;
        /* 每小时旋转30* */
        var hour = myDate.getHours()%12+min/60;
        /* 2.2设置旋转 */
        h.style.webkitTransform = "rotate("+ hour * 30 +"deg)";
        m.style.webkitTransform = "rotate("+ min * 6 +"deg)";
        s.style.webkitTransform = "rotate("+ sec * 6 +"deg)";
    },100);

HTTP/HTTPS###

  • 客户端从服务器拿数据发请求

  • http就是用来规定客户端和服务器之间的传输协议

  • 客户端发请求:HTTP请求(共有八种,常见的请求:GET、POST)
    1.post请求安全性高于get请求
    2.https:基于http通信协议中增加了一层SSL,更加安全
    3.对传出的数据进行了加密,即使数据被另有所图的人截取,解密也不会那么容易。

线程###

  • 多线程
    会提升性能,但是会降低安全性
    比如手机app发送请求会调用hub,但是同时还可以进行其他操作
  • 性能和安全性,只能取其一或者中和
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,117评论 4 360
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,963评论 1 290
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 107,897评论 0 240
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,805评论 0 203
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,208评论 3 286
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,535评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,797评论 2 311
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,493评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,215评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,477评论 2 244
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,988评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,325评论 2 252
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,971评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,055评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,807评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,544评论 2 271
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,455评论 2 266

推荐阅读更多精彩内容

  • 第1章 认识JS JavaScript能做什么?1.增强页面动态效果(如:下拉菜单、图片轮播、信息滚动等)2.实现...
    mo默22阅读 1,170评论 0 5
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,099评论 18 139
  • 课程结束后的几天,一直没有力气,不想说话,也不愿意出门和人打交道!看到老公儿子也是冷漠的态度!和以往打了鸡血似的热...
    竺子阅读 293评论 0 0
  • 壹 一道炫目的光凌厉的划破黑暗。 沈子琛下意识的抬起手臂挡在眼前,太阳暖烘烘的烤着他的皮肤。他扭一扭酸痛的身体,像...
    雾锁千灯阅读 330评论 2 1
  • 关于作者 芭芭拉·明托,毕业于哈佛大学,是麦肯锡咨询公司第一位女咨询顾问。她在写作方面的优势得到了麦肯锡高层的赏识...
    火星PArty阅读 1,026评论 0 1