JS基础知识总结

js引入方法:

1.内嵌

<script>
    //JS的内容
</script>

2:外联

<script src="JS/test.js"></script>

3:直接写在元素的事件属性上(所有以on开头命名的属性

<div onclick="alert('hello world!')">点我点我!!</div>

JS--基本数据类型

    1.字符串(文字)string:只要有引号都是文字
    2.数字number:正数、负数、浮点(小数)
    3.未定义/未知类型 undefined
    4.空值 null ,空对象
    5.布尔值 boolean:true /false
    6.Symbol:ES6 表示独一无二的值
    
     引用数据类型:
     1.Object
     2.Array
     3.Function*/
     
     输出方式:
      console.log("在控制台输出");
      alert(“弹框输出”);
      document.write(“文档输出”);
      
     数字==》字符串 
     let myStr1=String(myNo);
     let myStr2=myNo.toString();
     
     字符串==》数字
     myNo2=Number(myNo2);
     parseInt-转成整数
     parseFloat-保留小数点,一个一个转,直到无法再转为止
     
     布尔值==》数字
     true  1 
     false 0
     
     字符串==》布尔值
     字符串转布尔值的时候,除了空字符串 转为false,其他都是true(包括空格)
     
     数字==>布尔值
     
     除了0转为false,别的数字都转true
     
     自定义保留小数点
    var myNo3=13.22;
    console.log(myNo3.toFixed(1));
    
     /*三元运算符
    * 表达式?值1(true):  值2(false)  */
    
    if判断
    
    单分支
    if(条件){
    执行语句
    }
    
    双分支
    if(条件){
    执行语句1
    }else{
    执行语句2
    }
    
    多分支
    if(条件1){
    执行语句1
    }else if(条件2){
    执行语句2
    }
    
    if嵌套
    if(条件1){
        执行语句
        if(条件2){
            执行语句
        }
    }
    
    先循环后验证
    do{
        循环体
    }while(条件)
    
    先验证后循环
    while(条件){
    循环体
    }
    
    
    先验证后循环
    for(声明变量以及初始化;条件;循环体执行完后对变量重新赋值){
    循环体
    }
    
    for循环嵌套
    for(声明变量以及初始化;条件;循环体执行完后对变量重新赋值){
        循环体1
        for(声明变量以及初始化;条件;循环体执行完后对变量重新赋值){
            循环体2
        }
    }
    
    数组声明

    let arr = new Array();new可省略
    let arr = [];
    
    添加内容
     arr[0]=100;//下标从0开始
    arr[1]=300;//下标从0开始
    arr[2]=200;//下标从0开始
    
    /*2.创建数组的时候定义数组的长度
    * 在括号里面直接输入一个数字,代表定义数组的长度*/

    var arr2=Array(10);//length:10
    console.log(arr2);//空数组
    
    /*3.创建数组的时候初始化数组*/
    var arr3=Array(10,20,"hello",null,true);//length
    console.log(arr3.length);
    console.log(arr3[1]);
    
    es6的数组

     //=================Array.of=================
    //1.Array.of 用于将一组值转为数组

    let myArr=Array.of(11,2,8);
    console.log(Array.of());
    console.log(Array.of(1));
    console.log(myArr);
    //Array 和 Array.of的区别
    // console.log(Array());//空数组
    // console.log(Array(3));//数组长度为3
    // console.log(Array(3,11,8));//创建数组并且初始化数据

    /*Array方法:没有参数,一个参数,两个以上参数,返回的结果都不一样,只有当参数多于2时,
    * Array方法才会返回由参数组成的新数组
    *
    * Array.of:总是返回参数值组成的数组,如果没有参数,就返回一个空数组*/

    //===================copyWithin,替换数组========================
    /*Array.copyWithin(参1,参2,参3)
    *
    * 参1:target(必须):从该位置开始替换数据
    * 参2:start(可选):从该位置开始读取数据,0开始读取
    * 参数3:end(可选):到该位置前停止读取数据,默认等于数组长度
    * */

    let myCopyArr=[1,2,3,4,5].copyWithin(1,3);
    console.log(myCopyArr);
    
    数组的遍历
    
     var arr1=["a","b","c","d",5,6];
     // console.log(arr1.length);
    for(let i=0;i<arr1.length;i++){//i=3
        console.log(arr1[i])
    }
    
    math方法
    /*Math对象用于执行数学任务
    * 1.随机数:Math.random() :0-1之间的随机数 */
    let random=parseInt(Math.random()*11);
    document.write(random);//

    /*40-60
    * (Math.random()*(大-小)+小  )*/
    random= parseInt(Math.random()*20+40); /*40.55-59.99*/
    console.log(random);

    //四舍五入取整:round()
    console.log(Math.round(Math.random()*20+40));

    //向下取整 floor()
    console.log(Math.floor(25.9));
    //向上取整 ceil()
    console.log(Math.ceil(25.0001));

    //绝对值
    console.log(Math.abs(-21));
    
    console.log(Math.pow(2,3));

    console.log(Math.min(1,2,3,4,5,6,7));//最小值
    console.log(Math.max(1,2,3,4,5,6,7));//最大值

//有参函数
     function juxing(hang,lie) {//形参,在函数内部可以当做变量使用
      console.log(hang);
         console.log("列"+lie);
     for(let j=0;j<hang;j++){//行
             for(let i=0;i<lie;i++){//列
                 document.write("*");
         }
            document.write("<br>")
         }
    }
    console.log(hang);
     juxing(8,30);//实参

     juxing(6,20);

 //无参函数
     function guess() {
         let myNo=parseInt(Math.random()*101);
         alert(myNo);
         for(let i=1;i<=5;i++){
           let guess=parseInt(prompt("猜猜随机数"));
            if(guess==myNo){
                alert("聪明");
                 break;
             }else if(guess>myNo){
                 alert("第"+i+"次,你输入的是"+guess+"大了");
             }else if(guess<myNo){
                 alert("第"+i+"次,你输入的是"+guess+"小了");
            }

         }
     }

     guess();//函数的调用 :函数名()

//匿名函数
    let myF=function () {
        console.log("呱呱~!")
    };
    myF();

    /*es6 中的函数,用箭头函数的方式表示 */
    //无参
    myF= ()=> {
        console.log("hahaha");
    };
    myF();
    //有参
   myF= (n)=> {
        console.log(n);
    };
    myF("嘿嘿嘿");

    //有参函数可以简写为
    myF= n =>{
        console.log(n);
    };
    myF("呵呵呵呵");

   myF= n => n<4;

   myF=function (n) {
       let result;
       if(n<4){
           result=true
       }else{
           result=false
       }
       return result;
   };

    let myNo=myF(6);
    console.log(myNo);
    
     //es6:可以对数组解构赋值,
    // let [a,b,c]=[1,2,3];//可以从数组中提取值,对变量赋值
    只要等号两边的模式相同,左边的变量就会被赋予对应的值
    
    //不完全解构:等号左边只能匹配一部分等号右边的数组
    // let [x,y]=[1,2,3];
    
     //字符串解构赋值
    // const [a11,b11,c11,d11]="love";
    
    /*对象的解构赋值*/
    let {foo:baz1,bar:bar}={foo:"aaa",bar:"bbb"};
    
     /*字面量方式创建对象:{}
    * 在花括号的内部,对象的属性以 属性名称:值 的形式定义 ,属性由逗号分隔*/
    let cat={
        catName:"kitty",
        sex:"man",
        age:5
    };
    console.log(cat.catName);//获取对象属性
    
    
    //对象和数组结合使用
    //[{},{},{}]
    let cats=[
        {catName:"桃桃",catSex:"男",catAge:2},
        {catName:"飞飞",catSex:"男",catAge:2},
        {catName:"真真",catSex:"女",catAge:1},
    ];
    
    对象遍历
     for(var i=0;i<cats.length;i++){
        console.log(cats[i].catName);
    }

     /*扩展运算符 ... : 可以将一个数组转为用逗号分隔的参数序列
    * 解构赋值可以和扩展运算符一起使用*/
    // let [head,...tail]=[1,2,3,4,5,6];
    
     /*Array Math String Date*/
    //系统当前时间
    let d=new Date();
    console.log("创建的日期对象:"+d);
    console.log("获取年份:"+d.getFullYear());
    console.log("获取月份:"+(d.getMonth()+1));//月份从0开始
    console.log("获取日期:"+d.getDate());
    console.log("获取星期几:"+d.getDay());
    console.log("获取时:"+d.getHours());
    console.log("获取分:"+d.getMinutes());
    console.log("获取秒:"+d.getSeconds());
    console.log("获取豪秒:"+d.getMilliseconds());
    console.log("显示系统语言的日期方式:"+d.toLocaleString());//包含时分秒
    console.log("显示系统语言的日期方式:"+d.toLocaleDateString());//只是日期

    /*正则表达式
    * 语法:  /^规则$/   */
    let reg1=/^abc$/;
    let text1="ac";

    /*方法1:值为主,规则为次,用值去匹配规则
    * 字符.match(规则)*/

    let result=text1.match(reg1);
    console.log(result);//如果匹配,返回测试的字符串,如果不匹配,返回Null

    /*方法2:规则为主,值为次,用规则去匹配值
    * 规则.test(值)
    * 如果匹配返回true,否则返回false*/
    result=reg1.test(text1);
    console.log(result);

    //必须是两个字符,第一个字符0-9 第二个字符a-zA-Z.    []-代表一个字符
    let reg2=/^[0-9][0-9][a-zA-Z]$/;
    let text2="11A";
    console.log(reg2.test(text2));

    //第一个字符是以英文字母开头,后面跟数字(不限多少位)
    //+:出现一次及以上   *:出现0次及以上
    let reg3=/^[a-zA-Z][0-9]*$/;
    let text3="D";
    console.log(reg3.test(text3));

    //第一个字符以数字开头,后面是英文,总共至少出现5个英文
    /*
    * {5,8} 代表前一个字符出现5-8位
    * {5,}代表前一个字符至少出现5位
    * {8} 代表前一个字符必须出现8次
    * */
    let reg4=/^[0-9][a-zA-Z]{3}$/;
    let text4="9aaa";
    console.log(reg4.test(text4));

    //除了a 之外的单个字符
    let reg5=/^[^a]$/;
    let text5="四";
    console.log(reg5.test(text5));

    /*
    *   \d  代表数字    \D 除了数字
    *
    *   \w a-zA-Z0-9      \W 除了字母和数字
    *
    *   \s 代表空格
    *
    * */
    let reg6=/^\s*$/;
    let text6="            ";
    console.log(reg6.test(text6));

    /*hello@163.com*/
    var regEmail=/^\w[-\w.+]*@([A-Za-z0-9][-A-Za-z0-9]+\.)+[A-Za-z]{2,14}$/;
    // let regEmail=/^(\w){5,8}@(\w){2,}.(\w){2,}$/;
    let email="hello@163.com";
    console.log(regEmail.test(email));

    //match:返回数组
    let str="1 plus 2 equals 3";

    let myResult=str.match(/\w/g);  // g全局匹配
    console.log(myResult);

    /* () 子表达式
    *
    * replace("要替换的内容",“被替换的字符串”)
    *
    *$1代表第一个子表达式(java)
    * $2代表 (script)
    * */
    var str2="javascript";
    /**/
    myResult=str2.replace(/(java)(script)/,"$2$1");
    console.log(myResult);
    
     /*创建字符串的方法及区别*/
    // let str="hello";//字面量方法 基本类型值
    // let str1=new String("hello");//String  对象
    
    /*字符串的方法*/
    /*1.charAt():返回下标对应的字符串*/
    let str="hello world";
    var result=str.charAt(4);//下标从0开始
    console.log(result);

    //2.截取字符串,从起始下标开始,到结束下标(不包含结束下标)
    // 字符串.slice(起始下标,结束下标)
    result=str.slice(2,6);
    console.log(result);

    //3.截取字符串 substr(起始下标,截取多少个字符)
    result=str.substr(1,5);
    console.log(result);

    //4.字符第一次出现的下标位置
    //indexOf("字符")  ,如果没有出现过该字符,返回-1

    result=str.indexOf("a");
    console.log(result);//7

    //5.替换字符:replace("被替换的字符",“要替换成的字符”)
    //返回一个替换掉的string
    result=str.replace("world","单身狗");
    console.log(result);

    //6.搜索字符存不存在:search(“搜索的字符串”);
    // -1  没有  , 如果有则返回起始下标

    result=str.search("a");
    console.log(result);//7

    //7.字符串分割 split(“分割符”) ,返回数组,分割符会被去掉

    result=str.split(" ");
    console.log(result);

    //8.合并字符串 str1.concat(str2......),返回合并好的字符串
    let str2="bye";
    let str3="~bye~";
    result=str.concat(str2,str3);
    console.log(result);
    console.log(str2);

    //9.清除前后空格 trim()

    let str4="    桃     桃      ";
    console.log(str4);
    result=str4.trim();
    console.log(result);//不会清除文字之间的空格
    console.log("hello"=="  hello");//false
    
    /*查询是否有子节点,返回true/false*/
    let myHasChildNodes=document.body.hasChildNodes();
    console.log(myHasChildNodes);//true

    //查询所有子节点:childNodes
    let myChildNodes=document.body.childNodes;
    console.log(myChildNodes);
    
    //通过id获取节点
    let content1=document.getElementById("content1");
    console.log(content1);

    //通过className获取节点
    let divClass=document.getElementsByClassName("red");
    console.log(divClass);
    for(let i=0;i<divClass.length;i++){
        console.log(divClass[i]);
    }

    //通过元素标签名获取节点
    let myh1=document.getElementsByTagName("h1");
    console.log(myh1[0]);

    //通过Name获取节点
    let byName=document.getElementsByName("username");
    console.log(byName[1]);
    
    节点操作
     //1.找到需要操作的节点
    let div1=document.getElementById("div1");
        console.log(div1.attributes);//获取元素属性集合
        console.log(div1.attributes[0]);//获取单个属性

        console.log(div1.getAttribute("id"));//获取指定属性值

        console.log(div1.getAttributeNode("class").nodeName);//class
        console.log(div1.getAttributeNode("id").nodeType);//2
        console.log(div1.getAttributeNode("class").nodeValue);//red 
        
         //  //1.找到父节点
        // let div1=document.getElementById("div1");
        // //2.找到子节点
        // let myAge=document.getElementById("myAge");
        // //3.通过父节点删除子节点
        // div1.removeChild(myAge);

        //如果需要删除所有子节点??
         //1.找到父节点
        let div1=document.getElementById("div1");

        //2.找到所有子节点
        let sonList=div1.childNodes;
        // console.log(sonList);
        // console.log(sonList.length);

        //3.删除子节点
        for(let i=sonList.length-1;i>=0;i--){//    i=2
            div1.removeChild(sonList[i]);
            /*[1,2,3,4,5,6,7,8]   ---初始数组  length:8
            * [2,3,4,5,6,7,8]   ---第一次删除完毕:length:7
            * [2,4,5,6,7,8]    ---第2次删除完毕:length:6
            * [2,4,6,7,8]  ---第3次删除完毕:length:6
            *
            *
            * */
        }
            
         /*
        * 1.找到父节点
        * 2.通过父节点添加子节点
        * 3.子节点添加文本内容
        * */

        //1.找到父节点
        let div1=document.getElementById("div1");
        console.log(div1);

        //2.创建子节点
        let myDivElement=document.createElement("div");//

        //3.把创建的子节点放入父节点中

        div1.appendChild(myDivElement);

        //4.为子节点添加文本内容
           //4-1  添加文本节点
        let myTextNode=document.createTextNode("跪求粘人妹纸~~CP~~!!");
            //4-2  将文本节点放入新创建的div中
        myDivElement.appendChild(myTextNode);
            
        let box=document.getElementById("box");
    function getColor() {
        console.log(box.style.backgroundColor);//获取的也是内联样式
    }
    function changeColor() {

        // box.style.backgroundColor="#482bcc";
        // box.style.backgroundColor="red";

        //JS里面的css属性采用的是驼峰命名法
        box.style.background="rgb(0,200,122)";//改变的是内联样式
        box.style.width="500px";
        //box.style.transition="all .3s"
        //box.style.marginLeft
    }
        
        /*获取最终样式表:
        document.defaultView.getComputedStyle(box,null).backgroundColor; */

        let finalWidth;
        console.log(box.currentStyle.width);  //IE
        if(box.currentStyle==undefined){
            finalWidth=document.defaultView.getComputedStyle(box,null).backgroundColor;//DOM
        }else {
            finalWidth=box.currentStyle.width;//IE
        }
    
    innerHTML 
    
     let main=document.getElementById("main");
    function getInnerHtml() {
        console.log(main.innerHTML);//获取
        // main.innerHTML+="<h1>你们不要打我!!!</h1>"
        main.innerHTML=""
    }
    function getOuterHtml() {
        console.log(main.outerHTML);
        // main.outerHTML="";
        main.outerHTML="<div>尿飞~快点儿尿~!</div>";
    }
    function getInnerText() {
        console.log(typeof main.innerText);
        console.log(document.getElementsByTagName("h1")[0].innerText);
        document.getElementsByTagName("h1")[0].innerText+="现在想想,还是幼儿园好混~!";
    }

    console.log(document.body.innerText);

     /*替换节点:  父节点.replaceChild(新节点,被替换的节点)*/
    function myReplace() {
        let box=document.getElementById("box");
        let replace=document.getElementsByClassName("replace")[0];


        //1. 新创建一个节点去替换旧节点
        // let newDiv=document.createElement("div");
        // newDiv.innerHTML="我是飞飞~毛许强嘿嘿嘿~!";
        //
        // box.replaceChild(newDiv,replace);

        //2. 用已有的节点替换旧节点
        let title=document.getElementsByClassName("title")[0];
        box.replaceChild(title,replace)

    }
    
     let box=document.getElementById("box");
    let replace=document.getElementsByClassName("replace")[0];
    let title=document.getElementsByClassName("title")[0];
    /*父元素.insertBefore(新节点,插入在哪个节点的前方)*/
    function myInsertBefore(){
        //创建一个新节点
        let newDiv=document.createElement("div");
        newDiv.innerHTML="我是飞飞~毛许强嘿嘿嘿~!";

        //用已有的节点

        box.insertBefore(title,replace);
    }
    
     //复制节点
    /*要复制的节点.cloneNode(布尔值)
    * true:复制自己+所有子节点
    * false:只复制自己,不包含子节点的内容
    *
    * 复制完毕之后会返回复制的节点
    *
    * */
    let box=document.getElementById("box");

    function myClone() {
        let newClone=box.cloneNode(true);
        console.log(newClone);

        let mySection=document.getElementsByTagName("section")[0];

        mySection.appendChild(newClone);
    }
    
    获取其他节点
    let title=document.getElementsByClassName("title")[0];
    function getNode() {
        //找到上一个兄弟节点
        let box=title.previousElementSibling;
        // console.log(box);
        //下一个兄弟节点
        let lastDiv=title.nextElementSibling.nextElementSibling;
        console.log(lastDiv);
        //console.log(title.parentElement);//父元素
        // console.log(title.parentNode);//父节点
    }

    /*文本节点的操作
    * appendData()
    * insertData()
    * deleteData()
    * replaceData()*/
    
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body onclick="showMsg3()">

<div onclick="showMsg2()">
    <button onclick="showMsg()">按钮</button>
</div>
<script>
    /*button*/
    function showMsg() {
        alert("button");
    }
    /*div*/
    function showMsg2() {
        alert("div")
    }
    /*body*/
    function showMsg3() {
        alert("body");
    }
</script>
<!--                                                      event对象
        事件源  =========================================指派事件的处理程序
               (保存跟这次事件相关的信息:事件类型,用户按键,鼠标点击坐标)
网页上的元素
按钮--鼠标事件
文本框--键盘事件
滚动条--html事件
-->
</body>
</html> 

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

<div id="myDiv">
    <button id="btn">按钮</button>
</div>
<script>
    let btn=document.getElementById("btn");
    let myDiv=document.getElementById("myDiv");

    btn.addEventListener("click",showMsg,true);//true捕获   false  --冒泡
    myDiv.addEventListener("click",showMsg2,true);//true捕获   false  --冒泡
    document.body.addEventListener("click",showMsg3,true);//true捕获   false  --冒泡

    /*button*/
    function showMsg() {
        alert("button");
    }
    /*div*/
    function showMsg2() {
        alert("div")
    }
    /*body*/
    function showMsg3() {
        alert("body");
    }
</script>
</body>
</html>

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        div{
            height: 100px;
            background-color: #28beff;
        }
    </style>
</head>
<body>
<!--鼠标事件-->
<div onclick="myClick()" onmousedown="myDown()" onmouseup="myUp()" onmouseover="myOver()" onmouseout="myOut()" onmousemove="myMove()">
</div>
<script>
    function myClick() {
        console.log("鼠标点击事件");
    }
    function myDown() {
        console.log("鼠标按下")
    }
    function myUp() {
        console.log("鼠标弹起")
    }
    function myOver() {
        console.log("鼠标移入");
        // document.getElementsByTagName("div")[0].style.backgroundColor="#2190ff"
    }
    function myOut() {
        console.log("鼠标移出");
        // document.getElementsByTagName("div")[0].style.backgroundColor="#28beff"
    }
    function myMove() {
        console.log("鼠标移动")
    }
</script>
</body>
</html> 
    <body>
<!--键盘-->
<input type="text" onkeydown="myKeyDown()" onkeyup="myKeyUp()" onkeypress="myKeyPress()">
<script>
    function myKeyDown() {
        console.log("键盘按下");
    }
    function myKeyUp() {
        console.log("键盘弹起");
    }
    /*keypress只能在字符类*/
    function myKeyPress() {
        console.log("keyPress");
    }
</script>
</body>

<body>
<input type="text" onfocus="myFocus()" onblur="myBlur()">
<img src="close-16x16.png" alt="">
<script>
    document.getElementsByTagName("img")[0].onload=function () {
        console.log("图片资源加载完毕")
    };
    function myFocus() {
        console.log("获取焦点")
    }
    function myBlur() {
        console.log("失去焦点");
    }
    console.log("11111");

    window.onresize=function () {
        console.log("窗口改变事件");
    };
    window.onscroll=function () {
        console.log("滚动条事件");
    }

    /*onchange
    * 传统事件绑定
    * 现代事件绑定
    *
    *
    * 默认事件 a  form  */

</script>
</body>

<body>
<select name="sheng" onchange="changCity()">
    <option value="0">--请选择--</option>
    <option value="1">四川省</option>
    <option value="2">广东省</option>
    <option value="3">湖北省</option>
</select>
<select name="shi" >
    <option value="0">成都</option>
    <option value="1">乐山</option>
    <option value="2">绵阳</option>
    <option value="3">峨眉</option>
</select>
<!--input的onchange,是在失去焦点之后才触发的-->
<input type="text" onchange="InputOnchange()">

<input type="checkbox" onchange="checkBoxOc()">

<script>
    function checkBoxOc() {
        console.log("checkbox的onchange事件")
    }
    function InputOnchange() {
        console.log(11111);
    }
    function changCity() {
        console.log("触发事件");
        let sheng=document.getElementsByName("sheng")[0];
        let shi=document.getElementsByName("shi")[0];
        console.log(sheng.value);
        if(sheng.value==1){
            shi.innerHTML=" <option value=\"0\">成都</option>\n" +
                "    <option value=\"1\">乐山</option>\n" +
                "    <option value=\"2\">绵阳</option>\n" +
                "    <option value=\"3\">峨眉</option>"
        }else if(sheng.value==2){
            shi.innerHTML=" <option value=\"0\">番禺</option>\n" +
                "    <option value=\"1\">广州</option>\n" +
                "    <option value=\"2\">深圳</option>\n" +
                "    <option value=\"3\">东莞</option>"
        }
    }
</script>
</body>
    
    <body>
<!--<a href="1.event.html" onclick="return false">a标签跳转</a>-->
<a href="1.event.html" onclick="return confirmRedirect()">a标签跳转</a>

<form action="3.eventType.html" onsubmit="myPrevent()">
    <input type="text" name="username">
    <button >提交表单</button>
</form>

<script>
    function confirmRedirect() {
        let ans= confirm("确定要跳转吗");
        console.log(ans);
        return ans;
    }

    function myPrevent() {
        let usernameV=document.getElementsByName("username")[0].value;
        console.log(usernameV);

        let e=window.event||arguments[0];//事件对象
        e.preventDefault();//阻止form的提交

       //e.returnValue=false//IE阻止提交

        let form=document.getElementsByTagName("form")[0];
        form=document.forms[0];
        console.log(usernameV!="");
        if(usernameV!=""){//username的输入框不为空
            form.submit();//表单提交
        }

    }
</script>
</body>

<body>
<!--1.直接通过事件属性在元素上绑定-->
<button onclick="showMsg('hello')" id="btn1">传统1</button>

<!--2传统绑定2-->
<button id="btn2">传统2</button>

<!--3.传统绑定的取消-->
<button id="btn3">取消传统指派</button>
<script>
    /*传统绑定*/
    function showMsg(str) {
        console.log(str)
    }

    /**/
    let btn2=document.getElementById("btn2");
    btn2.onclick=function () {//btn1绑定了一个匿名函数
        showMsg2("传递参数")
    };

    btn2.onclick=function () {
        alert("我还想要给btn2的点击绑定一个事件");
    };

    function showMsg2(str) {
        console.log("传统绑定2")
    }
    // btn2.onclick=showMsg;  //没有括号    showMsg()

    let btn3=document.getElementById("btn3");
    let btn1=document.getElementById("btn1");
    btn3.onclick=function () {
        btn2.onclick=null;
    }
</script>
</body>

<body>
<button id="btn1">现代绑定</button>
<button id="btn2">取消现代绑定</button>
<script>
    let btn1=document.getElementById("btn1");
    let btn2=document.getElementById("btn2");
    /*事件源.addEventListener("事件名,去掉on",事件处理程序,布尔值-可选)
    * true-捕获  false-冒泡(默认)*/

   // btn1.addEventListener("click",showMsg);
    btn1.addEventListener("click",function () {
        showMsg("桃桃")
    });

    btn1.addEventListener("click",function () {
        showMsg("飞飞")
    });

    function showMsg(str) {
        alert("现代指派"+str);
        // alert("现代指派");
    }

    //移除事件监听
    btn2.addEventListener("click",function () {
        btn1.removeEventListener("click",showMsg)//现代事件的绑定,匿名函数无法移除事件监听

    })

    /*传统绑定,现代绑定
    * 1.传统绑定一个事件只能绑定一次,反复多次绑定只执行最后的一次
    *  传统绑定取消的时候直接:事件源.事件类型=null
    *
    * 2.现代绑定可以反复绑定多次,并且每次绑定都会被执行
    * 事件源.removeEventListener() ,并且匿名函数无法取消事件绑定
    *
    * */
    /*
    * IE现代绑定: 事件源.attachEvent("onclick",函数 )
    * IE取消绑定:事件源.detachEvent(“onclick”,函数);  //IE  11 以下版本
    *
    *
    *
    *
    * */
</script>
</body>

<body>
<div onclick="myEvent()"></div>

<input type="text" onkeyup="myEvent2()">

<!--当事件发生,就会产生事件对象,记录所有和事件相关的信息-->

<a href="3.bom.html">测试</a>
<script>
    function myEvent() {
        let e=window.event||arguments[0];//获取事件对象
        //事件类型
        console.log(e.type);
        //鼠标在页面上的坐标位置
        console.log(e.clientX);
        console.log(e.clientY);

        //鼠标在屏幕上的坐标位置
        // console.log(e.screenX);
        // console.log(e.screenY);

        //鼠标在事件源的坐标位置,相对于div的左上角
        console.log(e.offsetX);
        console.log(e.offsetY);
    }

    let div=document.getElementsByTagName("div")[0];
    div.style.marginTop="0px";
    function myEvent2() {

        let e=window.event||arguments[0];
        console.log(e.keyCode);//按键码
        console.log(e.key);//按键

        if(e.keyCode==32){
            alert("毛许强要飞~~~!@");
        }else if(e.keyCode==87){//w ,前进
            alert("前进");
            div.style.marginTop=(parseInt(div.style.marginTop)-20)+"px";
        }
    }
</script>
</body>
<body>
<button onclick="myLocation()">窗口跳转</button>
<button onclick="myHistory()">History对象</button>
<button onclick="myOpen()">window对象打开</button>
<button onclick="myClose()">window对象关闭</button>
<script>
    /*系统对话框*/
    // window.alert("abc");
    // window.prompt("输入");
    // window.confirm("确认");

    console.log(window);

    /*screen对象*/
    console.log("屏幕分辨率宽度=========="+screen.width);
    console.log("屏幕分辨率高度=========="+screen.height);

    /*document对象*/
    console.log("页面宽度============="+document.documentElement.clientWidth);
    console.log("页面高度============="+document.documentElement.clientHeight);
    /*location对象*/
    function myLocation() {
        console.log(location);
       location.href="1.eventObj.html";//跳内部
       // location.href="http://www.baidu.com";//跳外部
    }

    /*history对象*/
    function myHistory() {
       // history.back();//后退一页
      //   history.forward();//前进一页

        history.go(1);//正数 前进N页   负数 后退N页
    }
    /*Navigator对象
    *
    * userAgent属性用于浏览器识别的
    * */
    // alert("浏览器信息"+navigator.userAgent);

    var ua=navigator.userAgent.toLowerCase();//全部转为小写
    console.log(ua);
    if(/mobi|android|touch|mini/i.test(ua)){
        //手机浏览器
        console.log("移动端")
    }else {
        //非手机浏览器
        console.log("非移动端")
    }

    /*window对象*/
    function myOpen() {
        window.open("hw.html","newwindow","width=200,height=200")
    }
    /*只能关闭被打开的窗口*/
    function myClose() {
        window.close();
    }
</script>
</body>

<body>
<button onclick="changeColor()">改变颜色</button>
<button onclick="myTimeout()">500毫秒之后再执行改变颜色</button>
<button onclick="myClearTimeOut()">清除setTimeout</button>

<div id="box"></div>

<script>
    let box=document.getElementById("box");
    let timeout;

    //直接改色
    function changeColor() {
        box.style.backgroundColor="#ef0254"
    }

    //500ms再改色
    function myTimeout() {
        /*setTimeout(要执行的函数,延迟时间-毫秒)*/
        timeout=window.setTimeout(changeColor,2000);
    }
    //清除timeout
    function myClearTimeOut() {
        //clearTimeout(要清除的定时器)
        clearTimeout(timeout)
    }

</script>
</body>

<body>
<button onclick="changeSize()">改变宽度,宽度每次+20</button>
<button onclick="myInterval()">重复执行changeSize</button>
<button onclick="myClearInterval()">清除setInterval</button>
<div id="box"></div>
<script>
    let box=document.getElementById("box");
    let interval;
    function changeSize() {
        //console.log(box.style.width);
        if(box.style.width=="")box.style.width="200px";

        // console.log(box.style.width);
        box.style.width=(parseInt(box.style.width)+20)+"px"
    }

    //重复执行
    function myInterval() {
        //setInterval(函数,毫秒)
        interval=setInterval(changeSize,500);
    }

    //清除重复调用
    function myClearInterval() {
        clearInterval(interval);
    }
</script>
</body>

<body>
<header id="top"></header>
<div></div>
<input type="button" value="Back" onclick="setTop()">
<!--<a href="#top">回到顶部</a>-->

<button onclick="ts()">测试</button>
<script>
    //获取滚动条当前高度

    //alert(document.documentElement.scrollTop);  //DOM获取

    // alert(window.scrollY);  //BOM获取方法,只读,不可设置

    function ts() {
        window.scrollTo(0,50);//BOM设置方法。
        // document.documentElement.scrollTop=50;
    }

    //直接跳回顶部
    // function setTop() {
    //     document.documentElement.scrollTop=0;
    // }

    //缓慢滑动到顶部
    let scrollInter;
    function backTop() {

        // if(document.documentElement.scrollTop<=0){
        if(window.scrollY<=0){
            clearInterval(scrollInter)
        }else{
            // document.documentElement.scrollTop=document.documentElement.scrollTop-20;
            window.scrollTo(0,window.scrollY-20)
        }
    }

    function setTop() {
         scrollInter=setInterval(backTop,20);
    }
</script>
</body>

<body>
<!--简单调用-->
<!--<div>-->
    <!--<input type="button" value="打印" onclick="myPrint()">-->
<!--</div>-->

<!--分页打印-->

<div>
    <input type="button" value="打印" onclick="myPrint()">
</div>

<div id="page1">
    <!--page-break-after: always  在元素后插入分页符,实现分页-->
    <table width="100%" border="0" cellpadding="0" cellspacing="0" style="page-break-after: always">
        <tr>
            <td>第一页打印内容</td>
        </tr>
    </table>
</div>
<div id="page2">
    <table width="100%" border="0" cellpadding="0" cellspacing="0" >
        <tr>
            <td>第二页打印内容</td>
        </tr>
    </table>
</div>

<script>
    /*简单调用*/

    // function myPrint() {
    //     window.print();
    // }

    /*分页打印*/

    function myPrint() {
        let printStr="<html><head><meta http-equiv='Content-Type' content='text/html;charset=utf-8'></head><body>";
        let content="";

        //获取打印的页面内容
        let str=document.getElementById("page1").innerHTML;
        content=content+str;

        str=document.getElementById("page2").innerHTML;
        content=content+str;

        // console.log(content);

        printStr=printStr+content+"</body></html>";

        console.log(printStr);

        let pwin=window.open("print.html","print");

        pwin.document.write(printStr);
        pwin.document.close();  //必须
        pwin.print();
    }
</script>```
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。