HTML之JS

JavaScript语言通过浏览器解析。

JavaScript可以写在head中,也可以写在body中。被script标签所包裹,当浏览器解释HTML时,遇到style标签时,按照CSS规则解释,遇到Script标签时,按照JavaScript的语法规则解释。

引入JavaScript代码,类似于Python的import

<script src="public.js" type="text/javascript"></script>

head中引入JS与body中引入JS区别

html代码从上而下解析,在head中引入js,遇到js时就会加载,影响页面展示;在body最下方引入js,页面展示完成后再加载js,用户体验良好;

注释

单行注释通过 //  多行通过 /* */

 JS变量

age = 18; // 默认全局变量 
function func() {
    var name = 'nana'; // 局部变量 
}

JS基本数据类型(JavaScript 声明数据类型通过new)

字符串

// 定义字符串
var str = '今天天气真好!';
var name = 'nana';
// 字符串拼接
var name_str = name + str
// 字符串操作
s = 'AbCdEFgHIjkLmn'
s.charAt(1) //根据下标获取字符串某一个字符
s.substr(1,3) //根据下标获取字符串子序列 大于等于x 小于y
s.length //获取字符串长度
s.concat('nana')  //拼接字符串
s.indexOf('bC') //获取子序列的位置,如果不存在则返回-1
s.slice(1,3)  //切片
s.toLowerCase()  //变为小写
s.toUpperCase() //变为大写
var ss = 'a,b,c,d'
s.split(',',1) //切片 返回数组 参数1为按什么符号分隔(这里为逗号)参数2为取分割后数组的前x个元素

// 数字类型(JavaScript 只有一种数字类型。数字可以带小数点,也可以不带)

var age = 18;
var score = 89.22;
number = '18';
// 字符串转整数
var n = parseInt(number);
// 字符串转小数
f =parseFloat(number)
// 布尔类型(true 或 false)
var t = true;
var f = false;

数组类型(就是Python的列表)

// 第一种创建方式
var list = new Array();
list[0] = 'nana';
list[1] = 'momo';

// 第二种创建方式
var list2 = new Array('nana','momo');

// 第三种创建方式
var list3 = ['pala','jojo'];

// 数组操作
list3.length //数组的长度

list3.push('gogo') //尾部追加数据

list3.shift() //头部获取一个元素 并删除该元素

list3.pop() //尾部获取一个元素 并删除该元素

list3.unshift('lh') //头部插入一个数据

// 第一个参数,从哪里开始  第二个参数,删除几个  第三个参数,值
list3.splice(start, deleteCount, value) //插入、删除或替换数组的元素

list3.splice(n,0,val) //指定位置插入元素

list3.splice(n,1,val) //指定位置替换元素

list3.splice(n,1) //指定位置删除元素

list3.slice(1,2) //切片

list3.reverse() //反转

list3.join('-') //将数组根据分割符拼接成字符串

list3.concat(['abc']) //数组与数组拼接

list3.sort() //排序

对象类型(等同于Python的字典)

var dict = {name:'',age:15,sex:'女' };
var age = dict.age; 
var name = dict['name'];
delete dict['name']  //删除
delete dict.age       //删除

定时器

setInterval(alert('大师兄'),5000); //参数1 为定时器执行的功能,第二个参数为定时器工作的间隔时间 毫秒为单位
 
function t1() {
    console.log('我是大师兄')
}
setInterval('t1()', 5000);// 可以运行方法

JS条件判断语句

if (条件) {
    执行代码块
} else if (条件) {
    执行代码块
} else {
    执行代码块
};
 
if (1 == 1) { //两个等号不判断数据类型,只判断值
    console.log()
} else if (1 != 1) {
    console.log()
} else if (1 === 1) { //既判断数据类型,也判断值
    console.log()
} else if (1 !== 1) {
    console.log()
} else if (1 == 1 && 2 == 2) { //and
    console.log()
} else if (1 == 1 || 2 == 2) { //or
    console.log()
}
 
switch (a) {
    case 1:
        console.log(111);
        break;
    case 2:
        console.log(222);
        break;
    default:
        console.log(333)
}

JS循环语句

//第一种循环
//循环的是角标
tmp = ['宝马', '奔驰', '尼桑'];  //循环的是下标
tmp = '宝马奔驰尼桑';  //循环的是下标
tmp = {'宝马': 'BMW', '奔驰': 'BC'};  //循环的是key
for (var i in tmp) {
    console.log(tmp[i])
}
//第二种循环
//不支持字典的循环
for (var i = 0; i < 10; i++) {
    console.log(tmp[i])
}
//第三种循环
while (1 == 1) {
    console.log(111)
}

序列化

// 序列化
JSON.stringify(obj) //序列化
//字典对象转字符串
var map = {"name":"nana","age":18}
var strmap = JSON.stringify(map)

JSON.parse(str) //反序列化
//字符串转字典对象
JSON.parse(strmap)

转义

转义中文或特殊字符

// 1、在标准的url的规范中是不允许出现中文字符或某些特殊字符的,所以要进行转义
// 2、& 代表参数的链接,如果就是想传& 给后端那么必须转义
decodeURI(url) //URl中未转义的字符
decodeURIComponent(url) //URI组件中的未转义字符替换
//将url中未转义的字符替换
var uri = 'http://www.imdsx.cn/index.php/2017/07/27/html4/'
encodeURIComponent(uri)
// 结果:"http%3A%2F%2Fwww.imdsx.cn%2Findex.php%2F2017%2F07%2F27%2Fhtml4%2F"

encodeURI(url) //URI中的转义字符
encodeURIComponent(url) //转义URI组件中的字符
//将url中替换的字符转义回来
decodeURIComponent('http%3A%2F%2Fwww.imdsx.cn%2Findex.php%2F2017%2F07%2F27%2Fhtml4%2F')
// 结果:"http://www.imdsx.cn/index.php/2017/07/27/html4/"

// 字符串转义
var name='懵懂'
escape(name) //对字符串转义,转成unicode
unescape(name) //转义字符串解码

 函数定义

function func(name,age) {
    console.log(name);
    console.log(age);
}

//变量作用域
//变量先在函数体内找,找不到再往外层找
//在函数体外使用函数体内的变量,不会报错
name = 'waiceng'
function f() {
    name = 'neiceng'
    console.log(name)
}
f()


//匿名函数
func2 = function () {
    console.log('这是匿名函数')
}

 绑定onclick事件

第一种绑定方法

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <div>
        <label for="i1">用户名</label><input id="i1"><br>
        <label for="i2">密码</label><input id="i2"><br>
        <label for="i3">确认密码</label><input id="i3"><br>
        <!--onclick属性绑定js方法,点击触发-->
        <input type="button" value="注册" onclick="register()"> 
    </div>
    <script>
        function register() {
            // 弹框
            alert('这里是注册方法')
        }
    </script>
</body>
</html>    

第二种方法

通过获取元素标签,使用匿名函数绑定onclick事件

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <div>
        <label for="i1">用户名</label><input id="i1"><br>
        <label for="i2">密码</label><input id="i2"><br>
        <label for="i3">确认密码</label><input id="i3"><br>
        <input type="button" value="注册" id="register">
    </div>
    <script>

        //通过ID获取注册按钮元素标签
        var register = document.getElementById('register');
        //register元素绑定一个onclick方法,匿名函数
        register.onclick = function () {
            alert('这里是注册方法--匿名函数')
        };

    </script>
</body>
</html>

ajax发送post请求

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <div>
        <label for="i1">用户名</label><input id="i1" value="nanan"><br>
        <label for="i2">密码</label><input id="i2" value="aA123456"><br>
        <label for="i3">确认密码</label><input id="i3" value="aA123456"><br>
        <!--onclick属性绑定js方法,点击触发-->
        <!--<input type="button" value="注册" onclick="register()">-->
        <input type="button" value="注册" id="register">
    </div>

     <!--用来请求ajax的库-->
    <script src="http://libs.baidu.com/jquery/2.1.1/jquery.min.js"></script>
    <script>
        //通过ID获取注册按钮元素标签
        var register = document.getElementById('register');
        //register元素绑定一个onclick方法,匿名函数
        register.onclick = function () {
            var username = document.getElementById('i1').value;
            var pwd = document.getElementById('i2').value;
            var cpwd = document.getElementById('i3').value;
            var data = 'username=' + username + '&pwd=' + pwd + '&cpwd=' + cpwd
            //通过ajax来发送请求
            $.ajax({
                //请求的固定写法
                url:'http://api.nnzhp.cn/api/user/user_reg',
                method:'post',
                data:data,
                //回调函数,接口的返回值会存在info里
                success:function (info) {
                    //通过判断error_code的值来判断是否成功
                    if (info.error_code == 0){
                        var span = '<span>注册成功</span>'
                        //注册成功则添加一个span标签到注册按钮后面,显示注册成功
                        register.insertAdjacentHTML('afterEnd',span)
                    }else{
                        alert('注册失败,失败原因'+ info.msg)
                    }
                }
            })
        };

    </script>
</body>
</html>

ajax发送get请求

小练习,通过点击按钮获取返回值,把返回结果里的商品名称商品图片展示出来

 

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <input type="button" value="获取奖品信息" id="getProduct">
    <div id="i1">

    </div>

    <script src="http://libs.baidu.com/jquery/2.1.1/jquery.min.js"></script>
    <script>
        var getProduct = document.getElementById('getProduct')
        getProduct.onclick = function () {
            $.ajax({
                url:'http://api.nnzhp.cn/api/product/all',
                method:'get',
                success:function (info) {
                    //如果error_code返回为0则说明请求成功
                    if (info.error_code==0){
                        //循环商品
                        for(var i in info.product_info){
                            var product_name = info.product_info[i].product_name;
                            var img_url = info.product_info[i].img_url;
                            //拼接商品名称、商品图片的标签
                            var span = '<span>'+product_name+'</span>';
                            var img = '<img src="' + img_url + '" alt="">';
                            var s = span + img;
                            var div = document.getElementById('i1')
                            //将两个标签加入到div中
                            div.insertAdjacentHTML('beforeEnd',s);
                        }
                    }else{
                        alert('请求失败!')
                    }
                }
            })
        }
    </script>
</body>
</html>

 form表单提交

可自动拼接参数

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <div>
        <form id="registerForm">
            <label for="i1">用户名:</label><input id="i1" value="aaksdflef" name="username"><br>
            <label for="i2">密码:</label><input id="i2" value="Hhsdfkl" name="pwd"><br>
            <label for="i3">确认密码:</label><input id="i3" value="Hhsdfkl" name="cpwd"><br>
            <input type="button" value="注册" id="register">
        </form>
    </div>

    <script src="http://libs.baidu.com/jquery/2.1.1/jquery.min.js"></script>
    <script>
        var register = document.getElementById('register')
        register.onclick = function () {
            var data = $('#registerForm').serialize();//定位到form表单获取元素,固定写法
            var flag = confirm('确认注册么?'); //确认弹框,会返回一个布尔类型
            //选择确认注册,走下面流程
            if (flag){
                $.ajax({
                    url: 'http://api.nnzhp.cn/api/user/user_reg',
                    method: 'post',
                    data: data, //form表单提交时自动拼接参数
                    success: function (info) {

                        console.log(info)
                    }
                })
            }else{
                alert('取消注册')
            }
        }
    </script>

</body>
</html>

 

posted @ 2019-07-03 15:26  颜颜blog  阅读(647)  评论(0编辑  收藏  举报