web前端基础-javascript

前言------  新的一天,继续我的编程之路,加油!

javascript的简介

HTML  对页面进行了一个整体骨架的搭建

CSS    对页面进行修饰,和美化

javascript   对页面与用户进行交互

javascript是一种直译的脚本语言,由浏览器解释执行,不需要进行编译

什么是脚本语言?

       java源代码--->.class文件-----》由虚拟机执行

       脚本语言:源码------》解释执行

                         javascript是由浏览器解释执行。

javascript的组成

ECMAScript :核心组成部分,定义js的语法规范

DOM:document object model 文档对象模型, 主要是用来管理页面

BOM:browser object model  浏览器对象模型,浏览器的一些前进、后退、刷新、历史记录、地址栏等

javascript的引入

在HTML中,js是写在<script type="text/javascript"></script>标签中

内部引入和外部引入 

<head>
    <script type="text/javascript">
        alert("内部引入");
    </script>
    <!--外部引入-->
    <script src="./js/my.js"></script>
</head>

javascript的变量

js变量统一用  var 来定义。

语句结束时的  分号  可以有,可以没有。

区分大小写

单行注释://            多行注释:/*  */

基本类型:string、number、boolean、undefine(表示变量不含有值)、null

引用类型:对象、内置对象

类型转换:js内部自动转换

 

javascript的运算符

算术运算符:+   -   *   /  %     自加++    自减 --

赋值运算符:=   +=   -=    *=   /=    %=

比较运算符:>    <   !=   ==(只要值相等就可以)   ===(值和数据类型都必须相等)

逻辑运算符:&&   ||    !

三目运算符:条件1    ?  true   :   folse; 

                     + 号,var a = 10; var b='4';   ---------->>>>>>>>>a+b=104

javascript的语句

if-else;    while; do  while;  for;  switch;

在循环语句中有结束循环break,结束本次循环continue;

javascript声明函数和变量

声明函数:  1、 function 函数名(){         }

                     2、var 函数名 = function(){            }

声明基础类型变量:var   变量名  =  变量的值;

声明引用类型的变量:var  变量名  =  new  构造方法名();

javascript的输出

window.alert("弹框输出");   window 可以省略

document.write();  向页面输出

console.log();   向控制台输出

javascript对象

创建对象:1.   var  p  =  new 构造方法名();

                  2.   var  p  =  new  Object();     //这是new的js的内部对象

                  3.   var  p  =  {     //dui对象初始化方式

                                 name : "Jack",

                                 speak : function(){  alert("会吃");  }         

                        }

给对象动态的添加属性和方法:

                    p.name="Jack";

                    p.func=function speak(){  alert("说话");   }

给对象删除属性和方法:

                    delect p.name;

                    delect p.func;

对象的封装性:

<script type="text/javascript">
    function Dog(){
        var privatePro=function(){ alert("私有方法"); }
        privatePro();
        this.objPro=function(){ alert("对象方法"); }
        Dog.prototype.objPro1=function(){ alert("对象方法2"); }
    }
    Dog.classPro=function(){ alert("类方法");  }
    
    Dog.classPro();
    Dog d = new Dog();
    d.objPro();
    d.objPro1();

//运行结果依次为:类方法,私有方法(在new Dog()时运行),对象方法,对象方法2
</script>

对象的继承性:

<script type="text/javascript">
    /*继承性
      Apply() 实现属性和方法的继承; 单纯的继承属性和方法 相当于java中的super
      Prototype 实现原型的继承; 类型的继承
    */
   function Animal(name,age){
        this.name=name;
        this.age=age;
        this.shout=function(){
            alert("我是:"+this.name+",今年:"+this.age);
        };
        this.action=function(){
            alert("会吃");
        };
    }
    function Dog1(name,age){
        Animal.apply(this, [name,age]);
    }

    var jack = new Dog1("jack",3);
    alert(jack.name);
    alert(jack.age);
    jack.shout();
    jack.action();


</script>

对象的多态性:

<script type="text/javascript">
     //实现多态特征
    function Anima(){
        this.say=function(){
            alert("我是动物");
        };
    }

    function Do(){
        this.say=function(){
            alert("我是狗");
        };
    }
    Do.prototype=new Anima();

    function Cat(){
        this.say=function(){
            alert("我是猫");
        };
    }
    Cat.prototype=new Anima();

    function say(animal){
        if(animal instanceof Anima){
            animal.say();
        }
    }

    var dog=new Do();
    var cat=new Cat();
    say(dog);
    say(cat);

</script>

javascript作用域

全局变量、局部变量

类变量、对象变量,私有变量(其实也就是局部变量)

<script type="text/javascript">
    var a = 22; //全局变量
    function speak(){
        var b = 33;  //局部变量
        alert(b);
    }
    speak();
    alert(b);  //会报错   

//-------------------------------------------------

    function Dog(name,age){  
        this.objPro="对象属性";
        Dog.prototpe.objPro1="对象属性2";
        var privatePro="私有属性";
        this.name=name;
        this.speak() = function(){
            alret("我的名字是:"+name);
        }   
    }
    Dog.classPro="类属性";
    alert(C.classPro);
    var c =new C();
    alert(c.ObjPro);
    alert(c.objPro2);

</script>

javascript中的window对象

全局函数不属于任何内置对象:eval();   escape();   isNan();  isFinite();  parseFloat();  parseInt();   unescape(); 

常用方法:

        window.alert();

        window.setTimeout("方法名()" ,  5000);   //限定时间内执行一次

        window.setInterval("方法名()" , 1000);   //限定时间内执行多次(1000就是1秒)

        window.open("url");                               //打开新的窗口

<script type="text/javascript">
    window.alert("window对象的alert方法");
    function dzt(){
        alert("5秒后屌炸天");
    }

    function setDateTime(){
        var date=new Date();
        var day=date.getDay();
        var week;
        switch(day){
            case 0:week="星期日";break;
            case 1:week="星期一";break;
            case 2:week="星期二";break;
            case 3:week="星期三";break;
            case 4:week="星期四";break;
            case 5:week="星期五";break;
            case 6:week="星期六";break;
        }
        var today=date.getFullYear()+"年"+(date.getMonth()+1)+"月"+date.getDate()+"日  "+week+" "+date.getHours()+":"+date.getMinutes()+":"+date.getSeconds();
        document.getElementById("today").innerHTML=today;
    }

    window.setTimeout("dzt()", 5000); //限定时间内执行(执行一次)
    window.setInterval("setDateTime()", 1000); //限定时间内执行(执行多次)
</script>

javascript字符串对象

创建字符串:1.   var str =  "字符串实例化方式1";

                      2.   var str =  new String("字符串实例化方式2");

常用方法:str.length();                    //字符创长度

                  str.indexOf("abc",0);      //从当前位置查找字符串abc

                  str.replace("abc","java");//把abc替换成java

javascript数组

创建数组:1.  var  arr = new Array();

                  2.  var arr2 = new Array(3);  //只能存3个元素

常用方法:arr.sort();               //正向排序

                  arr.join();              //数组元素组合成字符串

                  arr.concat(arr2);  //合并素组元素

javascript日期 

日期使用js的内置对象

创建日期对象: var date = new Date();

常用方法:date.getFullYear()  年(返回一个四位数字)     date.getMonth() 月(返回0-11)     date.getDate() 日(返回1-31)

                  date.getHours()  时      date.getMinutes()  分      date.getSeconds()  秒

                  date.getDay() 返回一周的第几天

 

使用js完成页面简单的数据校验

js开发步骤

   1.确定事件

   2.当事件确定会触发一个函数 

   3.函数里对页面元素进行操作,进行一些交互动作

代码实现

test(String)方法:把与正则表达式相匹配的字符串匹配,正确返回true,失败返回false

提交事件:onsubmit="return  checkForst()"  必须加return,比较特殊。正则表达式要写在  /    /  之间  

              <script>
		    /*		1. 校验用户名, 用户不能为空, 长度不能小于6位
					2. 手机号合法输入
                    3. 邮箱合法输入
			*/
			function checkForm(){
				//获取用户名输入项
				var inputObj = document.getElementById("username");
				//获取输入项的值
				var uValue = inputObj.value;
			    alert(uValue);
				//用户名长度不能6位 ""
				if(uValue.length < 6 ){
					alert("对不起,您的长度太短!");
					return false;	
				}
				//密码长度大于6 和确认必须一致
				
				//获取密码框输入的值
				var input_password = document.getElementById("password");
				var uPass = input_password.value;
				
				if(uPass.length < 6){
					alert("对不起,您还是太短啦!");
					return false;
				}
				//校验手机号
				var input_mobile = document.getElementById("mobile");
				var uMobile = input_mobile.value;
				//
				if(!/^[1][3578][0-9]{9}$/.test(uMobile)){
					
					alert("对不起,您的手机号无法识别!");
					
					return false;
				}
				
				//校验邮箱: /^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(\.[a-zA-Z0-9_-])+/
				var inputEmail = document.getElementById("email");
				var uEmail = inputEmail.value;
				if(!/^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(\.[a-zA-Z0-9_-])+/.test(uEmail)){
					alert("对不起,邮箱不合法");
					return false;
				}			
				return true;
			}	
		</script>
		<body>
		<form action="JS开发步骤.html" onsubmit="return checkForm()">
			<div>用户名:<input id="username" type="text"  /></div>
			<div>密码:<input id="password" type="password"  /></div>
			<div>确认密码:<input id="repassword" type="password"  /></div>
			<div>手机号码:<input id="mobile"  type="number"  /></div>
			<div>邮箱:<input id="email" type="text"  /></div>
			<div><input type="submit" value="注册"  /></div>
		</form>
	    </body>

使用js完成页面图片轮播效果

需求分析:

       当页面加载完毕时进行图片的轮转效果

js开发步骤

       1、确定事件

       2、当点击事件会触发函数(当文档加载完毕时触发函数)

       3、在函数中对页面进行一些处理

代码实现

<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>轮播图</title>
    <script type="text/javascript">
        function init(){
            window.setInterval("ha()",3000);
        }
        var index=0;
        function ha() {
            var imbg = document.getElementById("imbg");
            var carIndex=index%3 + 1;
            imbg.src="./img/"+carIndex+".jpg";
            index++;
        }
    </script>
</head>
<body id="ss" onload="init()">
    <input type="button" value="点击切换图片" onclick="ha()">
    <img src="./img/1.jpg" id="imbg">
</body>
</html>

暂停计时器

 完成页面定时弹出广告   

需求分析:

       当打开一个页面的时候,过5秒钟会自动弹出一个广告,让你看5秒然后自动消失

js开发步骤:

         1.确定事件:页面加载完成的事件 onload

                    2.当点击事件要触发的函数:init()

                    3.在函数中进行页面处理

                                    定时函数:setTimeOut()   隔多少毫秒执行一次函数

                                                       setInterval()   每隔多少好眠执行一次函数

                                                       cleatTimeout()  结束定时器

                                                       clearInterval()   结束定时器

                                    显示广告:imga.style.display = "block";          display是一个属性

                                    隐藏广告:imga.style.display = "none";          

 

js文档加载顺序:

        当加载网页时,是从上而下加载的,遇到函数不会执行,只会加载进来

代码实现:

<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>定时弹出广告</title>
    <script type="text/javascript">
        function init() {
            window.setTimeout("startDime()",5000);
        }
        function startDime() {
            document.getElementById("imga").style.display="block";
            window.setTimeout("stopDime()",5000);
        }
        function stopDime() {
            document.getElementById("imga").style.display="none";
        }
    </script>

</head>
<body onload="init()">
    <img src="./img/美女.jpg" style="display: none" id="imga">
</body>
</html>

表单校验

需求分析:

       当输入用户名密码时候,在js简单校验中,输错的时候,直接弹出框来提示,用户体验不好,这次采用在用户名后面                    提示

js代码步骤:

       1.确定事件     2.事件调用函数     3.在函数中进行处理

        常用事件: onfocus:元素获得焦点事件

                           onblur:元素失去焦点事件

                           onkeyup:当键盘被松开事件

函数checkTim() 

代码实现:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>表单校验</title>
    <script>
        //用户名校验
        /*
        1、确定事件:获取焦点事件:onfocus
        2、事件触发函数:checkTim()
        3、在函数中处理提示信息
                提示信息<span></span>
        */
        function checkTim(uId, info){
            //显示提示信息
            document.getElementById(uId).innerHTML=info;
        }
        /*
        * 1、确定事件:onblur:失去焦点事件
        * 2、事件触发函数:checkText()
        * 3、函数中进行校验,用户名长度太短或者可用
        *  引用
        *  onkeyup:某个按键被松开事件
        * */
        function checkText() {
            //获取用户名
            var uName= document.getElementById("username").value;
            //获取span元素
            var span = document.getElementById("span_username");
            //进行校验
            if (uName.length < 6){
                span.innerHTML="<font color='red' size='2'>用户名太短啦!</font>";
                return false;
            }else {
                span.innerHTML="<font color='red' size='2'>用户名可以哦!</font>";
                return true;
            }
        }

        function checkPassWord() {
            var uPass = document.getElementById("upassword").value;
            var span = document.getElementById("span_password");
            if (uPass.length < 6){
                span.innerHTML="<font color='red' size='2'>密码太短啦!</font>";
                return false;
            } else{
                span.innerHTML="<font color='red' size='2'>密码  可以啦!</font>";
                return true;
            }
        }
        function checkRePassWord() {
            var uPass = document.getElementById("repassword").value;
            var span = document.getElementById("span_repassword");
            if (uPass.length < 6){
                span.innerHTML="<font color='red' size='2'>要与原密码一致</font>";
                return false;
            } else{
                span.innerHTML="";
                return true;
            }
        }
        function checkEmail(){
            var email = document.getElementById("email").value;
            var span = document.getElementById("span_email");
            if (!/^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(\.[a-zA-Z0-9_-])+/.test(email)){
                span.innerHTML = "<font color='red' size='2'>邮箱格式不正确</font>";
                return false;
            }else {
                span.innerHTML = "<font color='red' size='2'>邮箱格式正确</font>";
                return true;
            }
        }
        function checkForm() {
            var succ = checkText() && checkPassWord() && checkRePassWord() && checkEmail();
            return succ
        }
    </script>
</head>
<body>
    <div>
        <form action="./lunbotu.html" onsubmit="return checkForm()">
            用户名:<input type="text" id="username" onfocus="checkTim('span_username', '用户名长度不能小于6位数')" onblur="checkText()" onkeyup="checkText()"><span id="span_username"></span><br>
            密码:<input type="password" id="upassword" onfocus="checkTim('span_password', '密码长度不能小于6位数')" onblur="checkPassWord()" onkeyup="checkPassWord()"><span id="span_password"></span><br>
            确认密码:<input type="password" id="repassword" onfocus="checkTim('span_repassword', '密码要与原密码一致')" onblur="checkRePassWord()" onkeyup="checkRePassWord()"><span id="span_repassword"></span><br>
            邮箱:<input type="text" id="email" onfocus="checkTim('span_email', '邮箱格式一定要正确')" onblur="checkEmail()" onkeyup="checkEmail()"><span id="span_email"></span><br>
            <input type="submit" value="提交">
        </form>
    </div>
</body>
</html>

表格的隔行换色案例

需求分析:       

                  我们商品分类的信息太多,如果每一行都显示同一个颜色的话会让人看的眼花,为了提高用户体验,减少用户看错的                    情况,需要对表格进行隔行换色

3.2 技术分析

js代码步骤:

       1.确定事件:文档加载完成 onload事件     2.事件调用函数:init()     

       3.在函数中进行处理:操作表格每一行,动态改变背景色

代码实现:

<script type="text/javascript">
        function init(){
            //获取表格对象元素
            var tab = document.getElementById("tab");
            //获取表格中的每一行
            var rows = tab.rows;
            for (var i = 1; i<rows.length; i++){
                var row = rows[i]
                if(i%2==0){
                    row.bgColor = "yellow";
                }else{
                    row.bgColor = "red"
                }
            }
        }
</script>

复选框的全选全不选案例

需求分析:       

                  商品分类界面中,当我们点击全选框的时候,我们希望选中所有的商品,当我们取消掉的时候,我们希望不选中所有                    的商品

js代码步骤:

       1.确定事件:当用户点击时onclick事件     2.事件调用函数:checkAll();

       3.在函数中进行处理:

                       getElementByName()               返回name值相同的元素对象的集合

                       getElementByTagName()         返回标签名字相同的元素对象的集合

                       getElementById()                     返回指定id名称的第一个元素对象

       复选框checked属性:checked="checked" 时,默认被选中

代码实现:

function checkAll() {
            //获取第一个复选框
            var check = document.getElementById("checks");
            //得到第一个复选框的状态,使其他复选框的状态和他相同
            var checkedstatus = check.checked;
            //获取其他复选框的集合
            var checks = document.getElementsByName("checkone");
            for (var i=0; i<checks.length; i++){
                var one = checks[i];
                one.checked = checkedstatus;
            }

DOM树

Dom对象:

                 document对象:每个载入浏览器的html都成为一个document对象。

                 element对象:元素(节点)对象

                 attribute对象:属性对象

                 event对象:事件对象

每一个对象都有自己的属性,和行为(也就是方法)

<input type="text" id="aa" name="haha">
<input type="button" onclick="haha()" value="提交" id="aac" name="ssss">
<script type="text/javascript">
    function haha() {
        var sa = document.getElementById("aa").name="dd";
        alert(sa);
        var ss = document.getElementById("aac").name;
        alert(ss);
    }
</script>

input元素对象,可以访问value属性、name属性。

一些常用的 HTML DOM 方法:
  getElementById(id) - 获取带有指定 id 的节点(元素) 
  appendChild(node) - 插入新的子节点(元素) 
  removeChild(node) - 删除子节点(元素) 

  一些常用的 HTML DOM 属性:
  innerHTML - 节点(元素)的文本值 
  parentNode - 节点(元素)的父节点 
  childNodes - 节点(元素)的子节点 
  attributes - 节点(元素)的属性节点 


查找节点:
getElementById() 返回带有指定 ID 的元素。 
getElementsByTagName() 返回包含带有指定标签名称的所有元素的节点列表(集合/节点数组)。 
getElementsByClassName() 返回包含带有指定类名的所有元素的节点列表。 

增加节点:
createAttribute() 创建属性节点。 
createElement() 创建元素节点。 
createTextNode() 创建文本节点。 
insertBefore() 在指定的子节点前面插入新的子节点。 
appendChild() 把新的子节点添加到指定节点。 

删除节点:
removeChild() 删除子节点。 
replaceChild() 替换子节点。 

修改节点:
setAttribute()  修改属性
setAttributeNode()  修改属性节点

省市联动案例

代码步骤:

        1、确定事件:onchange事件:当下拉列表内容改变时候发生

         2、事件触发函数:onCase()函数

        3、在函数中处理一些事情

                        创建元素节点:document.appendElement("optiona")

                        创建文本节点:document.appendTextNode()

                         添加节点:haha.appentChild(lalala)

         <select></select>标签获取每一项options用     select元素对象.options

js代码:

<script type="text/javascript">
        /*
        * 1、确定事件:onchange事件:当下拉框内容改变时候发生
        * 2、事件触发函数:upCase()
        * 3、在函数中处理,获取元素的值 
        * */
        var shi =[["济宁","济南","日照"],["杭州","丽水","青田"],["郑州","北京","上海"]]
        function upCase() {
            var pri = document.getElementById("pri").value;
            //获取对应的城市
            var city = shi[pri];
            var pri1 = document.getElementById("pri1");
            //清除子元素
            pri1.options.length=0
            for (var i = 0; i<city.length; i++){
                //添加元素首先先创建元素
                var aa = document.createElement("option"); //动态添加了一个<option>标签
                var text = document.createTextNode(city[i]);
                aa.appendChild(text);
                pri1.appendChild(aa);
            }
        }
    </script>

<select id="pri" onchange="upCase()">
        <option>---请选择---</option>
        <option value="0">山东省</option>
        <option value="1">浙江省</option>
        <option value="2">湖南省</option>
    </select>
    <select id="pri1">
</select>

商品的左右移动

需求分析:

       在我们的分类管理中, 我们能够分类管理我们的信息,当点击修改时,进入一个可以编辑的页面,进行我们商品的                      分类的修改。

代码步骤:

       1、确定事件,点击事件onclick 双击事件ondblclick

       2、事件触发函数moveSelect()

       3、在函数中进行操作

                           将左边select选中的商品移动到右边的select

                            var a = document.getElementById("leftSelect").options;  //获得所有option项

                             a[i].selected //属性selected表示选中返回true,没选中返回folse

                             HTML 中 <select></select>标签multiple="multiple"属性表示显示多项

                             applentChild()方法将元素节点添加到父节点中是移动而不是复制。

js代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>商品的左右选择</title>
    <script type="text/javascript">
        /*
        * 1、确认事件 onclick:点击事件
        * 2、事件发生调用函数:leftSelect()
        * 3、在函数进行处理
        *           获得选中的商品,并将商品移动到右边的select中
        * */
        function moveSelect(a, b) {
            var leftSelect = document.getElementById(a);
            var options1 = leftSelect.options;
            var rightSelect = document.getElementById(b);
            //遍历所有项,并找出选中的项
            for (var i = 0; i<options1.length; i++){
                var optionOne = options1[i];
                if (optionOne.selected) {
                    //将选中的项添加到右边的select中
                    rightSelect.appendChild(optionOne);
                }
            }
        }
        function moveSelectAll(a, b) {
            var leftSelect = document.getElementById(a);
            var options1 = leftSelect.options;
            var rightSelect = document.getElementById(b);
            //遍历所有项,并找出选中的项
            for (var i = options1.length-1; i>=0; i--){
                var optionOne = options1[i];
                rightSelect.appendChild(optionOne);
            }
        }
    </script>
</head>
<body>
    <table border="2px" width="400px" align="center">
        <tr>
            <td>分类名称</td>
            <td><input type="text" value="手机数码"></td>
        </tr>
        <tr>
            <td>分类描述</td>
            <td><input type="text" value="这里是手机数码"></td>
        </tr>
        <tr>
            <td>分类商品</td>
            <td>
                <div style="float: left;">
                    已有商品:<br>
                    <select multiple="multiple" id="leftSelect" ondblclick="moveSelect('leftSelect','rightSelect')">
                        <option>华为</option>
                        <option>小米</option>
                        <option>自行车</option>
                        <option>电动车</option>
                    </select><br>
                    <a href="#" onclick="moveSelect('leftSelect','rightSelect')">&gt;&gt;</a><br>
                    <a href="#" onclick="moveSelectAll('leftSelect','rightSelect')">&gt;&gt;&gt;</a>
                </div>
                <div style="float: right;">
                    未有商品:<br>
                    <select multiple="multiple" id="rightSelect" ondblclick="moveSelect('rightSelect','leftSelect')">
                        <option>苹果</option>
                        <option>轿车</option>
                        <option>飞机</option>
                        <option>ipd</option>
                    </select><br>
                    <a href="#" onclick="moveSelect('rightSelect','leftSelect')">&lt;&lt;</a><br>
                    <a href="#" onclick="moveSelectAll('rightSelect','leftSelect')">&lt;&lt;&lt;</a>
                </div>
            </td>
        </tr>
        <tr>
            <td colspan="2"><input type="button" value="提交"></td>
        </tr>
    </table>
</body>
</html>

 

猜你喜欢

转载自blog.csdn.net/weixin_44142032/article/details/87970316