zoukankan      html  css  js  c++  java
  • JavaScript

    JavaScript

    HTML、CSS只能写出静态效果,JS可以制作动态效果

    • JavaScript,是一门编程语言,浏览器内置了JavaScript语言的解释器,所以JavaScript代码在浏览器上就可以运行。
    • DOM,(Document Object Model)是指文档对象模型,通过它,可以操作HTML文档的相关功能,例如:对标签内容进行删除和替换等。
    • BOM,(Browser Object Model)是指浏览器对象模型,通过他,可以操作浏览器相关的功能,例如:浏览器设置定时器,浏览器定时刷新页面。

    JavaScript是编程语言,DOM和BOM是两个模块,利用JavaScript语言再结合DOM、BOM模块可以让我们的页面出现动态的效果。

    1.1 js基础

    引入方式:
    Script代码块,只能在当前页面使用。

        <script type="text/javascript">
        // 内部编写JavaScript代码
        </script>
    

    独立js文件,可以被多个引入之后使用。

    <script type="text/javascript" src="JavaScript文件路径"></script>

    推荐把css在header引入,js代码放在body标签的底部,这样先加载页面文字和样式,体验较好。

    js中单行注释用 // ;多行注释用 /* */

    局部变量必须一个 var 开头,如果未使用var,则默认表示声明的是全局变量。


    常见数据类型

    typeof(a)查看类型

    数字(Number):JavaScript中不区分整数值和浮点数值,JavaScript中所有数字均用浮点数值表示。

    // 声明
    var page = 111;
    var age = Number(18);
    var a1 = 1,a2 = 2, a3 = 3;
    // 转换
    parseInt("1.2");  // 将某值转换成数字,不成功则NaN
    parseFloat("1.2");  // 将某值转换成浮点数,不成功则NaN
    /*
    NaN,非数字。可使用 isNaN(num) 来判断。
    Infinity,无穷大。可使用 isFinite(num) 来判断。
    */
    

    字符串(String)

     声明
    var name = "anlnalanna";
    var name = String("anlnalanna");
    var age_str = String(18);
    // 常用方法
    var name = "anlnalanna";
    names[0]                    // 索引
    name.length                 // 获取字符串长度
    name.trim()                 // 去除空白
    name.charAt(index)          // 根据索引获取字符
    name.substring(start,end)   // 根据索引获取子序列
    str.toLowerCase()	str.toUperCase()    //大小写转换:
    str1.indexOf('l')  str1.lastIndexOf('l')  //查询索引
    str1.substr(1,2)//获取字符(1,2)
    str1.substring(1,2)//获取字符(1)
    str1.replace('e','a')//替换
    str1.split('e')//切片
    str1.concat('123')//连接
    
    parseInt()向下取整	Math.ceil()向上取整	parseFloat 	eval //强制类型转换:
    

    布尔类型(Boolean)

    var status = true;
    var status = false;
    /*
    在js中进行比较时,需要注意:
        ==       比较值相等
        !=       不等于
        ===      比较值和类型相等
        !===     不等于
        ||        或
        &&        且
    */
    

    数组(Array)

    //声明
    var names = ['a', 'b', 'c']
    var names = Array('anna', 'nana')
    
    // 常见方法
    names[0]                        // 索引
    names.push(ele)                 // 尾部追加元素
    var ele = names.obj.pop()       // 尾部移除一个元素
    names.unshift(ele)              // 头部插入元素
    var ele = obj.shift()           // 头部移除一个元素
    names.splice(index,0,ele)       // 在指定索引位置插入元素
    names.splice(index,1,ele)       // 指定索引位置替换元素
    names.splice(index,1)           // 指定位置删除元素
    names.slice(start,end)          // 切片
    names.reverse()                 // 原数组反转
    names.join(sep)                 // 将数组元素连接起来以构建一个字符串
    names.concat(val,..)            // 连接数组
    names.sort()                    // 对原数组进行排序
    names.length //长度
    
    .join给数字拼接
    var arr=[1,2,3]
    arr.Tostring()
    arr.ValueOf()返回初始值
    arr.concat()添加进数组里
    arr.reverse()反转
    arr.sort()排序//按照字母(转换成字符串)排序 所以25>100
    points.sort(function(a, b){return a - b});//列表数字排序
    arr.slice()切片
    
    //删除子数组	x.splice(start,deleteCount,value,…)(deleteCount删除,value插入)
    var a=[1,2,3,4,5,6,7];
    a.splice(1,2);//[1,4,5,6,7]
    
    
    • push,pop栈操作
    • shift unshift也是栈操作:unshift在前面插入元素,shift 从前面移除元素

    字典(对象Object)

    // 声明
    info = {
        name:'anna',
        "age":18
    }
    // 常用方法
    var val = info['name']      // 获取
    info['age'] = 20            // 修改
    info['gender'] = 'male'     // 新增
    delete info['age']          // 删除
    

    其他(null、undefine)

    • null是JavaScript语言的关键字,它表示一个特殊值,常用来描述“空值”,相当于Python的None。

    • undefined是一个特殊值,表示变量声明但未定义。

    var name;
    console.log(typeof(name));
    

    条件

    if,else,用于判断。

    var age = 18;
    if(age <18){
    }else if(age>=18 and 1 == 1){
    }else if(age>=30){
    }else{
    }
    

    switch,case,用于判断等于某些值。

    var num = 18;
    switch(num){
        case 10:
            console.log('未成年');
            break;
        case 18:
            console.log('成年');
            break;
        case 35:
            console.log('油腻老男人');
            break;
        case 100:
            console.log('....');
            break;
        default:
            console.log('太大了');
    }
    

    循环语句

    • for(var i in ['国产','日韩','欧美']),默认生成索引,适用于:字符串、元组、字典。

    • for(var i=0;i<10;i++),自定义索引并设置增加步长,适用于:字符串、元组。(字典索引非有序)

    异常处理

    在JavaScript的异常处理中有两个注意事项:

    • 主动抛异常 throw “xx” 或 throw Error({code:1000,error:’错了’})
    • catch只能破获一次,如果想要对异常精细化处理可以在catch代码块中再做类型判断。
    try {
        //这段代码从上往下运行,其中任何一个语句抛出异常该代码块就结束运行
        var name = ''
    }
    catch (e) {
        // 如果try代码块中抛出了异常,catch代码块中的代码就会被执行。
        //e是一个局部变量,用来指向Error对象或者其他抛出的对象
    }
    finally {
         //无论try中代码是否有异常抛出(甚至是try代码块中有return语句),finally代码块中始终会被执行。
    }
    

    函数

    JavaScript中的函数可以简单概括为以下三类:

    • 普通函数:
    function func(arg){
        return arg + 1;
    }
    
    • 匿名函数
    function (arg){
        return arg + 1;
    }
    // 一般用于当做参数使用,例如:设置定时器 setInterval(function(){},1000)
    
    • 自执行函数,自动触发执行。
     (function(arg){
         console.log(arg);
     })('anna')
    
    

    传入参数多了不报错,用需要的个数,少了返回NaN
    json 序列化(将对象和字符串之间进行转换。)

    • JSON.stringify(object) ,序列化
    • JSON.parse(str),反序列化

    网络中数据传输本质上是基于字符串进行,如果想要把一个js的对象通过网络发送到某个网站,就需要对对象进行序列化然后发送。

    1.2 DOM

    文档对象模型(Document Object Model,DOM)是一种用于HTML编程接口。它给文档提供了一种结构化的表示方法,可以改变文档的内容和呈现方式。更直白一点讲:DOM相当于是一个模块,提供了关于HTML文档中对标签进行操作的功能,JavaScript结合DOM可以对HTML中的标签进行操作。

    DOM对象:https://www.runoob.com/jsref/dom-obj-document.html

    节点:

    DOM 代码必须 写在body后面。节点属性:

    • 整个文档是一个节点Document
    • 每个HTML元素是一个元素节点Element
    • HTML元素内的文本是文本节点Text
    • HTML属性是属性节点Attribute
    • 注释是注释节点comment
    var ele=document.getElementsByClassName('p1')[0];
    console.log(ele);
    console.log('attribute',ele.attributes);
    console.log('nodeType',ele.nodeType);
    console.log('nodeName',ele.nodeName);
    console.log('nodeValue',ele.nodeValue);
    console.log('innerHTML',ele.innerHTML);	//文本包括标签
    console.log('innerText',ele.innerText);	//文本不包括标签
    //导航属性:
    console.log(ele.parentNode);
    console.log(ele.firstChild);
    console.log(ele.lastChild);
    console.log(ele.childNodes);
    //text空文本也是节点对象
    //常用导航属性:
    console.log(ele.parentNode);
    console.log(ele.children);
    console.log(ele.firstElementChild);
    console.log(ele.lastElementChild);
    console.log(ele.nextElementSibling);//下一个兄弟标签元素
    console.log(ele.previousElementSibling);//上一个兄弟元素标签元素
    console.log(ele.childNodes);
    
    

    选择器

    • 直接查找
    document.getElementById(arg)             // 根据ID获取一个标签对象
    document.getElementsByClassName(arg)     // 根据class属性获取标签对象集合
    document.getElementsByName(arg)       // 根据name属性值获取标签对象集合
    document.getElementsByTagName(arg)       // 根据标签名获取标签对象集合
    
    • 间接查找
    var tag = document.getElementById(arg);
    tag.parentElement           // 找当前标签对象的父标签对象
    tag.children                // 找当前标签对象的所有子标签对象
    tag.firstElementChild       // 找当前标签对象的第一个子标签对象
    tag.lastElementChild        // 找当前标签对象最后一个子标签对象
    tag.nextElementtSibling     // 找当前标签对象下一个兄弟标签对象
    tag.previousElementSibling  // 找当前标签对象上一个兄弟标签对象
    

    DOM 元素对象

    DOM元素属性和方法:https://www.runoob.com/jsref/dom-obj-all.html

    • element.appendChild() 为元素添加一个新的子元素
    • element.removeChild() 删除一个子元素
    • element.replaceChild() 替换一个子元素
    • element.remove() 删除这个元素
    • nodelist.length 返回节点列表的节点数目。(元素之间的空格是文本,文本是节点)

    如删除表格一行数据:

    <td>
        <input type="button" value="删除" onclick="deleteRow(this);">
    </td>
    
    <script>
    //删除表格中当前行的数据
    function deleteRow(self) {
        var rowTr = self.parentElement.parentElement;
        rowTr.remove();
    }
    </script>
    

    文本操作

    对标签内部文本进行操作时,可以通过 innerText 和 innerHTML来进行。

    • innerText
      • 标签对象.innerText,读取标签内容(仅文本)。
      • 标签对象.innerText="an",修改标签内容(仅文本)。
    • innerHTML
      • 标签对象.innerHTML,读取标签内容(含标签)。
      • 标签对象.innerText="<a href='#'>an</a>",修改标签内容(标签、文本)。

    属性对象

    值操作针对与用户交互相关的标签,其中内部使用value属性进行操作。

    input,textarea,select

    单选框radio复选框checkbox,通过value可以取值。但在应用时常常是以选择形式出现,所以在使用过程中还会去判断他是否已被选中。
    扩展:标签对象.checked可以对选中状态进行读取和设置。

    var radios = document.getElementsByName('gender');
    for (var i = 0; i < radios.length; i++) {
        if (radios[i].value === "male") {
            radios[i].checked = true;
        }
    }
    

    class 属性操作

    DOM中主要提供了三个帮助我们操作class属性值的功能:

    • 标签对象.className,class属性对应的值直接操作。
    • 标签对象.classList.remove(cls),class属性对应值删除某个样式。
    • 标签对象.classList.add(cls),class属性中添加样式。

    模态对话框

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <style>
            body{
                margin: 0;
            }
            .container{
                 980px;
                margin: 0 auto;
            }
            .header{
                height: 48px;
                background-color: #499ef3;
            }
            .shade{
                position: fixed;
                top: 0;
                bottom: 0;
                left: 0;
                right: 0;
                background-color: black;
                opacity: 0.7;
            }
            .login{
                 400px;
                height: 300px;
                background-color: white;
                border: 1px solid #dddddd;
                position: fixed;
                top: 60px;
                left: 50%;
                margin-left: -200px;
            }
            .hide{
                display: none;
            }
        </style>
    </head>
    <body>
        <div class="header">
            <div style="float: right;margin: 10px;">
                <a onclick="showDialog();" style="padding: 5px 10px;background-color: goldenrod;color: white;">登录</a>
            </div>
        </div>
        <div class="body">
            <div class="container" style="text-align: center">
                <img src="https://w.wallhaven.cc/full/ox/wallhaven-ox83gp.jpg" alt="">
            </div>
        </div>
        <!--遮罩层-->
        <div id="shade" class="shade hide"></div>
        <!--登录框-->
        <div id="login" class="login hide">
            <h2 style="text-align: center">用户登录</h2>
            <a onclick="hideDialog();" style="padding: 5px 10px;background-color: cornflowerblue;color: white;">关闭</a>
        </div>
        <script type="text/javascript">
            function showDialog() {
                document.getElementById('shade').classList.remove('hide');
                document.getElementById('login').classList.remove('hide');
            }
            function hideDialog() {
                document.getElementById('shade').classList.add('hide');
                document.getElementById('login').classList.add('hide');
            }
        </script>
    </body>
    </html>
    

    style 样式操作

    如果想要对样式操作的粒度更细一些,可以使用style样式操作,他比class属性对样式的操作粒度更细。

    document.getElementById('header').style.backgroundColor = 'green';
    

    点赞+1效果

    function doFavor(self) {
        var plusTag = document.createElement('span');
        var fontSize = 10;
        var marginLeft = 10;
        var marginTop = 10;
        var opacity = 1;
        plusTag.innerText = "+1";
        plusTag.style.color = 'green';
        plusTag.style.position = 'absolute';
        plusTag.style.fontSize = fontSize + 'px';
        plusTag.style.marginLeft = marginLeft + 'px';
        plusTag.style.marginTop = marginTop + 'px';
        plusTag.style.opacity = opacity;
        self.appendChild(plusTag);
        var interval = setInterval(function() {
            fontSize += 5;
            marginLeft += 5;
            marginTop -= 5;
            opacity -= 0.2;
            plusTag.style.fontSize = fontSize + 'px';
            plusTag.style.marginLeft = marginLeft + 'px';
            plusTag.style.marginTop = marginTop + 'px';
            plusTag.style.opacity = opacity;
            if (opacity <= 0) {
                self.removeChild(plusTag);
                clearInterval(interval);
            }
        }, 100)
    }
    

    DOM属性对象(element.attributes[0])

    //获取属性值
    document.getElementsByTagName("button")[0].attributes[0].value;
    //改变属性值
    var h=document.getElementsByTagName("H1")[0];
    h.getAttributeNode("style").value="color:green";
    

    node的增删改

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <style>
            .div1,.div2,.div3,.div4{
                 400px;height: 150px}
            .div1{background: skyblue}
            .div2{background: lightgoldenrodyellow}
        </style>
    </head>
    <body>
        <div class="div1">
            <button onclick="add()">增加</button>
            <button onclick="del()">删除</button>
        </div>
        <div class="div2">
            <button onclick="change()">change</button>
            <p>这是P标签</p>
        </div>
    </body>
    <script>
        function add() {
            var ele=document.createElement("p");
            var father=document.getElementsByClassName("div1")[0];
            ele.innerHTML="hello P";//添加文本
            father.appendChild(ele);//父节点添加子节点
        }
        function del() {
            var father=document.getElementsByClassName("div1")[0];
            var son=father.getElementsByTagName("p")[0];// var son=father.lastElementChild;
            father.removeChild(son);
        }
        function change() {
            var father=document.getElementsByClassName("div2")[0];
            var img=document.createElement("img");
            img.src="1.png";
            var son=father.getElementsByTagName("p")[0];
            father.replaceChild(img,son) // father.removeChild(son);father.append(img);
        }
    </script>
    </html>
    

    修改HTML内容InnerHTML和innertext

    修改cssele.style.color="red";
    修改属性:
    img.setAttribute("src","1.png");
    创建建属性:
    var ele=document.createElement("p");
    删除属性:
    father.removeChild(son);
    关于类的操作:

    • ele.className
    • ele.classList.add
    • ele.classList.remove

    input的checked属性

    反选:input.checked=!input.checked
    其他事件:https://www.runoob.com/jsref/dom-obj-event.html


    事件

    DOM中可以为标签设置事件,给指定标签绑定事件之后,只要对应事件被处罚,就会执行对应代码。常见事件有:

    • onclick,单击时触发事件
    • ondblclick,双击触发事件
    • onchange,内容修改时触发事件
    • onfocus,获取焦点时触发事件
    • onblur,失去焦点触发事件
    • onsubmit 只能给表单使用
    <!-- 标签上绑定的函数,this为window,不是标签,要让变成标签,要传入参数this,并且在函数中传入参数arg,调用arg  -->
    <iframe frameborder="1" id="iframe" name="ifr" onload="reloadiframe()"></iframe>
    

    默认绑定的事件先发生,再submit。如果返回false,就不会执行submit按钮的事件了

    事件传播

    两个嵌套的div绑定事件,两个都会执行,先执行里面的,再执行外面的,要阻止传播,使用e.stopPropagation()

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>event</title>
        <style>
            .inner{ 1000px;height:100px;background: gray}
            .outer{ 3000px;height:300px;background: indianred}
        </style>
    </head>
    <body>
        <div class="outer">
            <div class="inner"></div>
        </div>
    </body>
    <script>
        var inner=document.getElementsByClassName("inner")[0];
        var outer=document.getElementsByClassName("outer")[0];
        inner.onclick=function() {
            this.style.background="black";
            alert("inner");
            event.stopPropagation();//防止传播
        }
        outer.onclick=function () {
            alert("outer");
        }
    </script>
    </html>
    
    

    左侧菜单点击切换:

    <!DOCTYPE html>
    <html lang="en">
    
    <head>
        <meta charset="UTF-8">
        <title>CSS学习</title>
        <style>
            body {
                margin: 0;
            }
            
            .header {
                height: 48px;
                background-color: #499ef3;
            }
            
            .body .menu {
                position: fixed;
                top: 48px;
                left: 0;
                bottom: 0;
                 220px;
                border-right: 1px solid #dddddd;
                overflow: scroll;
            }
            
            .body .content {
                position: fixed;
                top: 48px;
                right: 0;
                bottom: 0;
                left: 225px;
                /* 超出范围的话,出现滚轮 */
                overflow: scroll;
            }
            
            .body .menu .title {
                padding: 8px;
                border-bottom: 1px solid #dddddd;
                background-color: #5f4687;
                color: white;
            }
            
            .body .menu .child {
                border-bottom: 1px solid #dddddd;
            }
            
            .body .menu .child a {
                display: block;
                padding: 5px 10px;
                color: black;
                text-decoration: none;
            }
            
            .body .menu .child a:hover {
                background-color: #dddddd;
            }
            
            .hide {
                display: none;
            }
        </style>
    </head>
    
    <body>
        <div class="header"></div>
        <div class="body">
            <div class="menu">
                <div class="item">
                    <div class="title" onclick="showMenu(this);">国产</div>
                    <div class="child">
                        <a href="#">少年的你</a>
                        <a href="#">我不是药神</a>
                        <a href="#">我和我的祖国</a>
                    </div>
                </div>
                <div class="item">
                    <div class="title" onclick="showMenu(this);">欧美</div>
                    <div class="child hide ">
                        <a href="#">战争之王</a>
                        <a href="#">华尔街之狼</a>
                        <a href="#">聚焦</a>
                    </div>
                </div>
            </div>
            <div class="content"></div>
        </div>
        <script type="text/javascript">
            function showMenu(self) {
                var childList = document.getElementsByClassName('child');
                for (var i = 0; i < childList.length; i++) {
                    childList[i].classList.add('hide');
                }
                self.nextElementSibling.classList.remove('hide');
            }
        </script>
    </body>
    </html>
    
    

    搜索关键字:

    function getFocus(self) {
        self.className = 'black';
        if (self.value === '请输入关键字' || self.value.trim().length === 0) {
            self.value = '';
        }
    }
    function leave(self) {
        if (self.value.length === 0) {
            self.value = '请输入关键字';
            self.className = 'gray';
        } else {
            self.className = 'black';
        }
    }
    

    1.3 BOM

    BOM(Browser Object Model)是指浏览器对象模型,通过他,可以操作浏览器相关的功能。更直白一点讲:BOM相当于是一个模块,提供了关于浏览器操作的功能。

    提示框

    • alert,提示框。
    • confirm,确认框(有确认,取消)。

    浏览器URL

    • location.href,获取当前浏览器URL。
    • location.href = "url",设置URL,即:重定向。
    • location.reload(),重新加载,即:刷新页面。

    定时器

    • setInterval(function(){},1000),创建多次定时器。(1000为1秒)
    • clearInterval(定时器对象),删除多次定时器。
    • setTimeout(function(){},1000),创建单次定时器。
    • clearTimeout(定时器对象),删除单次定时器。

    其他BOM:https://www.runoob.com/jsref/obj-window.html

  • 相关阅读:
    OpenAM单点登录系统安装部署手册
    SSL、TLS协议格式、HTTPS通信过程、RDP SSL通信过程
    git命令手册
    乱七八糟
    基于OpenAM系列的SSO----基础
    MySQL必知必会:组合查询(Union)
    Python文件读写、StringIO和BytesIO
    Java遇见HTML——JSP篇之JavaWeb简介
    框架基础——全面解析Java注解
    8、JavaScript深入浅出——数据类型
  • 原文地址:https://www.cnblogs.com/Neroi/p/12727134.html
Copyright © 2011-2022 走看看