化身天使的博客

web开发:js基础篇

1. 使用js

1.1 外部脚本引入

<script>脚本内容写在script标签里</script>

<script src="../js/ajax.js"></script>               

//src里写脚本地址,可以是本地,也可以是链接

 

1.2 嵌入html

<script>脚本内容写在script标签里</script>

 

1.3 嵌入元素里

<input type='button' onclick="javascript:window.location.href ='templates/query.html'" /> 

1.4 执行js代码

  • 书签执行js代码

把书签里的网址改为js代码,点击书签即可直接执行js,格式如下:

javascript:alert('a');

 

2. 数据类型

2.1 定义变量

var a;    //定义变量用var标识符,不能指定类型,js自动判断

a = 3;   //为变量赋值整型

var a = '字符串';  //定义变量为字符串并赋值

var a = ['abc','hi','345']  / /定义

var x = {apple : "5元"};  //对象, 键不用引号

const a =3;   //定义常量, 定义后不能修改

let a=3;     //a只定义在当前的代码块内

var t = new Date();      //获取当前时间,赋值给t  

2.2 类型判断

typeof a           //判断变量a的类型, typeof(a)不能判断出引用类型,统一返回object, getElementById获取的都是object类型

parseInt(a)      //判断是否整型

parseFloat()     //判断浮点型

isNaN()        //判断空类型

 

2.3 标识符

&&    //与

||     //或

===    //完全等于

==     //等于

!=     //不等于

2.4 字符串

2.4.1 字符串转列表           

s = "aloha, good day"      //同python,将字符串分割为数组

a = s.split(",");           //将s按照逗号分割为列表,保存为a["aloha","good day"]   

2.4.2 字符串截取/切片

 s.slice(0, 7)      //截取前7个字符, 包含索引0, 不包括7

 s.slice(7)      //从索引7截取到结尾

s.slice(-13,-7)    //从位置 -12 到位置 -6 

 

2.4.3 删除

s.trim()    #删除首尾空格

 

2.4.4 类型转换

a.toString()     //其他转字符串类型

2.4.5 正则表达式

   var reg = /http.+http(.+)/ ;  //定义正则, 写在/ / 中,

   reg.exec(s)[1];    

//从字符串提取出匹配的数据, 数据在组1, exec同python的search

var reg = /模式/i     //不分大小写

var reg = /模式/g     //存在多个时, 查找多个, 需要用match方法

var reg = /模式/m    //多行匹配

  •  

 

 

2.5 数组

var a = [1, 2]

2.5.1 获取长度

a.length

2.5.2 遍历

for (var i = 0; i < data.length; i++) {

    content += '<div>' + data[i] + '</div>';

}

2.5.3 判断

判断是否数组

Array.isArray(a)     //判断a是否为数组

判断是否存在某值

arr.includes(‘abc’)    //判断数组arr是否包含abc, 包含返回true,

arr.indexOf(abc’); //得到指定元素的下标, 不存在返回-1

 

  •  

2.6 对象(字典)object

2.6.1 定义-赋值-引用

var x = {apple:"5元"};  //定义时赋值

x.banana = “6元”;    //添加或修改

alert(x.apple);       //引用

var x = { tv:  {‘haier’: "1500元"}  };   //嵌套对象

x.tv[‘haier’]            //引用嵌套对象

 

 

 

2.6.2 判断是否为对象

var obj ={}

if (obj.constructor === Object)   //判断obj是否为对象类型

 

2.6.3 遍历对象类型

单层遍历

var obj = {}

var str= '';

for (var item in obj){

    str +=item+":"+obj[item]+'<br></br>';

}

递归遍历

var content = '';

function obj_bianli(obj) {

    for (var item in obj) {

        if (obj[item].constructor === Object) {  

            // if (data_dict[item] instanceof Object) {   

            obj_bianli(obj[item]);

        } else {

            content += item + " : " + obj[item] + '<br>';

        }

    }

    return content;

};

  •  

 

 

 

 

 

3. Dom元素获取及处理

3.1 元素获取

3.1.1 元素获取

var id_name = document.getElementById('id');

document.getElementsByName('');        //以下方法均返回数组

document.getElementsByClassName('class');

document.getELementsByTagName(tag);    //h1,p,div

document.querySelectorAll();

document.forms     //获取所有表单,第一个表单document.forms[0]

document.links     //所有链接

document.images    //图片

document.url      //当前页面路径,返回字符串

3.1.2 获取元素值等属性

id1.value;             //获取元素的值

id1.value.length    //获取元素值的长度

 

name1[2].checked         //判断单选框name1是否选中了第二个选项

form.my_name.value       //取得表单中my_name元素的值

sessionStorage.getItem("token")    //从存储获取 token的值

3.2 节点处理

 var gg=document.getElementById("id"); 

3.2.1 节点属性

gg.name     #名称

gg.value    #值

gg.length    #长度

 

3.2.2 创建节点

document.createElement("name");        //创建元素节点

document.createTextNode("文本节点"):     

document.createAttribute("属性节点");   

 

3.2.3 插入节点

gg.appendChild("追加节点");

gg.insertBefore("节点1,节点2");  //节点2前面插入节点1

 

3.2.4 修改节点

gg.parentNode.replaceChild(新节点,旧节点);

 

3.2.5 删除节点

gg.parentNode.removeChild(gg);      //删除节点gg,返回移除的元素名称,可用于屏蔽元素

clearInterval(t);                #

 

3.3 元素处理

3.3.1 样式处理

gg.style.display="none";               //设置元素隐藏,可用于屏蔽元素
gg.style.height="0px";                  //高度
gg.style.width="0px";                   //宽度

gg.className = "";            //设置元素的class名称,可用于屏蔽元素

gg.remove("style");            //移除gg元素的style,可用于屏蔽元素

 

3.3.2 设置元素的值

var d = document.getElementById("d");

d.value = 1;      

 

sessionStorage.setItem("token", “token详情”);         

 //数据存入sessionStorage, 跟字典类型不太一样键值之间逗号隔开, 一条语句只能存一条

 

3.3.3 禁用元素

var btn = document.getElementById("b_scene");  //获取按键

btn.disabled = true;             //禁用按键

4. 输出

alert('弹窗');  

var t = document.getElementById("con");    //通过id定位到元素,

t.innerHTML=""  //接收字符串,替换掉原来的内容,如果有html元素会自动解析

t.innerText=""  //同上,区别是不做任何解析,原样输出

t.value=""     //其他同Text,区别是只能用在设置了value的元素,如<input type='text' id="con" value=''  />

t.append=("")    //接收字符串,追加到指定元素后

t.after=""     //也是追加,是倒序的

document.write(‘内容’);         //这个方法会出现覆盖掉整个页面的问题(通过onclick()或window.onload调用js函数时)

console.log('a')  //输出内容到控制台 

5. 控制语句

var gg = document.getElementById('id');

5.1 判断语句

if(gg != null){               //判断元素是否存在

         alert('if')

}else if(  && ){          //

         alert('else');

}                         //if和for、while这些语句块结束都不加符号

 

5.2 循环语句

5.2.1 for

for(var i=0;i<data.length;i++){

  document.write(data[i])

}

 

5.2.2 while

while (gg == null) {

    var a = gg.parentNode.removeChild(gg);

    if (a != null) {

      break;                                            //break退出,continue继续下一次,和python一样

    }

  }

 

6. 函数

6.1 函数

function test(a, b) {        //声明
    return a * b;              
}

test(2,5)               //js内调用

 

<input type="button" id="b1" onclick="test(this.form)" />    //html内调用,可以把表单作为参数传入。编写chrom插件时,onclick不能用    form.元素名称.value   //用这种方式获取指定元素的值 

onclick="test('haha')"

6.2 匿名函数

6.2.1 匿名函数

windon.onload = function(x){                       //事件发生时调用

     return x+3

};

var show = function(){                             //赋值给一个变量,用变量名调用,和有名函数没看出区别
    alert('hello');
};
show();                                                     //变量名加括号调用

6.2.2 箭头函数(匿名函数简写形式)

x  => x+3    //左边传入参数,传入多个用括号,不需传参用空括号。右边单行语句返回值可省略return,多行要加花括号,不能省略return

 

6.2.3 定义匿名函数时直接调用

方式一:

(function(){                               //小括号可以换成方括号[ ]
    document.write('hello');
}());

方式二:

(function(){                        //包装函数,第一个()将函数变成表达式,第二个()代表执行这个函数
    document.write('wo hao');
})();

 

方式三:

!function(){                                      // !号可以换成+、-、~、void 
    document.write('ni hao');
}()

6.3 系统函数

6.3.1 数学函数

math.ceil(5.9)     //向上取整

math.floor(5.9)    //floor向下取整

  1. toFixed(2)    //对a四舍六入, 保留两位小数

Math.round(a)   //对a四舍五入取整

  • foreach

 

7. 事件处理

var b = document.getElementById('b1');

7.1 事件绑定

7.1.1 方法一:事件属性注册处理函数

b.onclick=test('参数')       //b单击时调用test()

b.onfocus=test()       //获得鼠标焦点时

 

7.1.2  方法二:addEventListener

b.addEventListener("click", test); //b绑定单击事件,单击时调用函数test,不能传参数.想要传参只能定义一个匿名函数,在匿名函数里调用

 

7.1.3 按键监听

//回车按下时,执行函数user_query(); 

document.onkeydown = function (e) {          //按下按键时检测

    var ee = e || window.event;

    if (ee.keyCode == 13) {           //keyCode 13是回车

        user_query();                 //回车按下时,触发该事件

        return false;

    }

    return true;

};

 

7.1.4 事件类型

window.onload =  test()     //页面加载时调用

id.onclick  =  test()       //单击时调用

document.onkeydown = function (e) {  }  //按下按键时调用       

 

  •  

 

 

 

8. 发送数据及获取后端数据

8.1 原生js,xmlHttpRequest

8.1.1 GET发送请求及获取返回  

var url = 'http://www.abcd.com';     //请求的网址

top.location = url;             //解决跨域的问题,先转到这个网站,再发送异步请求

var xhr = new XMLHttpRequest();     //创建xhr对象

  xhr.responseType = 'json';        //指定服务器返回的数据类型为json,缺省字符串,其他选项还有document,blob,arrayBuffer       
  xhr.open('GET',url , true);        //第三个参数true异步,false同步,缺省true

  xhr.setRequestHeader("mydata", "要发送的数据"); 

//1.可选项, 设置请求头, 非必须, 类似字典格式, 逗号隔开, 一条语句一个字段。                                                     

//2.get请求的send不能发送数据, 可以把要发送的简短数据放到请求头里发送
  xhr.send();                  //发送请求                                          
  xhr.onreadystatechange = function(e) {
  if (this.readyState == 4 && this.status == 200) {
    var s = this.response;                   //从服务器接收数据,保存到s
   }
  };

8.1.2 POST发送数据及获取返回

function user_query() {             

    var url = '/api/query';                       //请求地址

    var form = document.getElementById('query_form');     //根据表单id获取表单

    var formData = new FormData(form);              //获取表单数据

    var xhr = new XMLHttpRequest(); 

    xhr.responseType = 'json';         

    xhr.open('post', url, true);         

     //xhr.setRequestHeader("Authorization", "Bearer " + token);    //设置请求头, 非必须, 类似字典格式, 逗号隔开, 一条语句一个字段

    xhr.send(formData);            //发送表单,类型也可以是字符串, 只有post和put类型可以发送数据                                         

    xhr.onreadystatechange = function (e) {

        if (this.readyState == 4 && this.status == 200) {

            var data = this.response;                   //从服务器接收数据,保存到data

            var r = document.getElementsByName("radio1");    //获取单选框

            if (r[2].checked) {                     //判断单选项2是否被选中

                alert(data); 

            } 

        }

    };

}

 

自定义表单(不使用序列化)

var formData = new FormData();

  formData.append('username', '张三');

  formData.append('id', 123456);

8.2  jQuery Ajax方法

前后端示例数据:

<input  type="button" onclick="login()" value="登录">                 //前端:表单中的按钮,单击后调用login()函数

return {"msg": "query"}                                      //后端:返回的数据

 

实现:

<script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.0/jquery.min.js"></script>

<script>

  function login(){

    $.ajax({

         url:'/api/login',                //提交的地址,代替表单中的action

         type:'POST',                   //get、post

         data: $('#form1').serialize(),       //form1是表单的id,jQuery用$符号获取元素,#号代表用id获取,.点号代表用class获取

         success:function(data){            //请求成功时,执行success的语句,后端返回的数据存入data

          if(data.msg == 'query'){          //我定义的后端返回一个字典型数据,键名叫msg

            window.location.href ='templates/query.html';      

           }                                                

         },

         error:function() {               //请求失败时,执行error的语句,非必须,可以只有success

           alert('请求失败');                                

         }

    });

  };

</script>

 

8.3 原生js文件下载

function get_data(data_type) {

    var url = '/api/export/'+data_type;                        //请求地址

    var xhr = new XMLHttpRequest();

    xhr.responseType = "blob";                 //指定响应类型blob

    xhr.open('GET', url, true);               //第三个参数true异步,false同步,缺省true

    xhr.send();

    xhr.onreadystatechange = function (e) {

        if (this.readyState == 4 && this.status == 200) {

 

            var blob = new Blob([this.response],        

                { type: "application/csv" }                       // csv 的格式为csv。excel的格式vnd.ms-excel

            );

            var aa = document.createElement('a');   // 创建a链接 href链接地址 download为下载下来后文件的名称

            aa.href = URL.createObjectURL(blob);         //创建blob对象

            aa.innerHTML = 'a链接';

            //aa.download = 'aa.csv';      //文件名, 不管用

            aa.style.display = 'none';         //隐藏a标签 直接调用a标签的点击事件

            document.body.appendChild(aa);

            msg.innerHTML = "导出完成";

            aa.click();                                             //点击下载链接

            aa.remove();                                      //移除创建的临时元素

            URL.revokeObjectURL(aa.href);       //移除blob对象

        } else if (this.status == 401) {

            self.location = '/index.html'

        }

    };

}

 

9. BOM浏览器操作

9.1 定时器

 t = setTimeout( function(){ del() },7000 );       //延时执行,7秒后执行函数del()。不用嵌套的方式在油猴报错函数未定义  

clearTimeout(t);                         //取消延时执行

i = setInterval(function(){ del() }, "2000");      //周期执行,每隔两秒执行一次del函数

clearInterval(i);                        //取消周期执行(相当于退出循环)

9.2 自定义睡眠函数

方法一:

function sleep(d){                             //单位毫秒,秒数乘以1000,

    for(var t = Date.now();Date.now() - t <= d;); 

}

 

方法二:不管用,就用方法一吧

function sleep(ms) {

return new Promise(resolve => setTimeout(resolve, ms));

}

sleep(3000);        //暂停3秒,1秒等于1000毫秒 

9.3 window对象

9.3.1 标签页管理

open(url,,)   //打开新标签页,可选参数,第二个设置窗口名称或者打开方式,“_self”在当前页面打开,第三个参数设置窗口大小,外观等

win1 = open(url);        //如果要操作新打开的窗口,open的时候赋值

win1.location =           //操作新窗口

window.opener         //子窗口操作父窗口

self.opener          //同上,当前窗口的父窗口

close()      //关闭当前标签

9.3.2 其他

back()  //后退

forward()  //前进

 

confirm('消息')    //确认对话框,返回true或false

prompt('消息',[默认值'])      //弹出对话框,让用户输入内容,返回用户输入的内容

 

9.4  location对象

9.4.1 打开链接

location.href= url      //如果打开的页面不属于当前网站,需完整路径

top.location =           

self.location =       

窗口名称.location =         

location.assign()     

location.replace()   

9.4.2 其他操作

 

location.reload()    //刷新

location.port=     //获取端口

location.search=   /获取查询条件

 

10. 时间处理

10.1 时间函数

var date = new Date();  //获取当前日期

date.getFullYear()    //从日期获取年

date.getMonth();    //从日期获取月份

date.getDate();      //从日期获取几号

10.2 示例设置HTML时间控件的日期为当前日期

html

<input id ="d" type="date">

js代码

function send_date() {

    var d = document.getElementById("d")     //<input id ="d" type="date">

    var date = new Date();

    var month_t = date.getMonth().toString();

    if (date.getMonth() + 1 < 10)

        month_t = '0' + (date.getMonth() + 1);

 

 

    var day_t = date.getDate().toString();

    if (date.getDate() < 10)

        day_t = '0' + (date.getDate())

 

 

    var dateString = date.getFullYear() + "-" + (month_t) + "-" + day_t;

    d.value = dateString;

}

11. 异常处理

try {

  //

}

catch(err) {

    //留空即是跳过

}

 

posted @ 2021-08-09 13:11  化身天使  阅读(85)  评论(0)    收藏  举报