js BOM对象 DOM对象

BOM对象

window对象

所有浏览器都支持 window 对象。
概念上讲.一个html文档对应一个window对象.
功能上讲: 控制浏览器窗口的.
使用上讲: window对象不需要创建对象,直接使用即可.

Window 对象方法(全局变量)

alert()            显示带有一段消息和一个确认按钮的警告框。
confirm()          显示带有一段消息以及确认按钮和取消按钮的对话框(确定为true、取消为flase)。
prompt()           显示可提示用户输入的对话框。

open()             打开一个新的浏览器窗口或查找一个已命名的窗口。
close()            关闭浏览器窗口。

setInterval()      按照指定的周期(以毫秒计)来调用函数或计算表达式。
clearInterval()    取消由 setInterval() 设置的 timeout。
setTimeout()       在指定的毫秒数后调用函数或计算表达式。
clearTimeout()     取消由 setTimeout() 方法设置的 timeout。
scrollTo()         把内容滚动到指定的坐标。

方法使用

1、alert confirm prompt以及open函数

//----------alert confirm prompt----------------------------
    //alert('aaa');
    
    
    /* var result = confirm("您确定要删除吗?");
    alert(result); */

    //prompt 参数1 : 提示信息.   参数2:输入框的默认值. 返回值是用户输入的内容.

    // var result = prompt("请输入一个数字!","haha");
    // alert(result);


    方法讲解:    
        //open方法 打开和一个新的窗口 并 进入指定网址.参数1 : 网址.
        //调用方式1
            //open("http://www.baidu.com");
        //参数1 打开新窗口的网址(可不填).  参数2.填入新窗口的名字(一般可以不填). 参数3: 新打开窗口的参数.
            open('','','width=200,resizable=no,height=100'); // 新打开一个宽为200 高为100的窗口
       resizable 窗口是否可调节 
//close方法 将当前文档窗口关闭. //close();

示例:

var num = Math.round(Math.random()*100);
    function acceptInput(){
    //2.让用户输入(prompt)    并接受 用户输入结果
    var userNum = prompt("请输入一个0~100之间的数字!","0");
    //3.将用户输入的值与 随机数进行比较
            if(isNaN(+userNum)){
                //用户输入的无效(重复2,3步骤)
                alert("请输入有效数字!");
                acceptInput();
            }
            else if(userNum > num){
            //大了==> 提示用户大了,让用户重新输入(重复2,3步骤)
                alert("您输入的大了!");
                acceptInput();
            }else if(userNum < num){
            //小了==> 提示用户小了,让用户重新输入(重复2,3步骤)
                alert("您输入的小了!");
                acceptInput();
            }else{
            //答对了==>提示用户答对了 , 询问用户是否继续游戏(confirm).
                var result = confirm("恭喜您!答对了,是否继续游戏?");
                if(result){
                    //是 ==> 重复123步骤.
                    num = Math.round(Math.random()*100);
                    acceptInput();
                }else{
                    //否==> 关闭窗口(close方法).
                    close();
                }
            }
    }

2、setInterval(定时器),clearInterval(清除定时器)

setInterval() 方法会不停地调用函数,直到 clearInterval() 被调用或窗口被关闭。由 setInterval() 返回的 ID 值可用作 clearInterval() 方法的参数。

语法:setInterval(code,millisec)
其中,code为要调用的函数或要执行的代码串。millisec周期性执行或调用 code 之间的时间间隔,以毫秒计。


3、input,button

<head>
<script> function bar(){ // 获取当前时间字符串 var curr_time=new Date(); var s_time=curr_time.toLocaleString(); // 找到标签,然后对其value赋值 var ele=document.getElementById("timer"); ele.value=s_time; } function stop(){ alert(123 ); }   </script> </head> <body> <!--onfocus 获取光标事件--> < type="text" id="timer" οnfοcus="start()"> <!--单击鼠标事件--> <button οnclick="stop()">end</button> </body>

定时器练习:

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

        var ID;
        function start(){
            if (ID==undefined){
                 bar();
                 ID=setInterval(bar,1000); // 123
                }
        }
        function bar(){

            // 获取当前时间字符串
            var curr_time=new Date();
            var s_time=curr_time.toLocaleString();

            // 找到标签,然后对其value赋值
            var ele=document.getElementById("timer");
            ele.value=s_time;

        }
        function stop(){
            clearInterval(ID);//清除最后一次定时器
            ID=undefined;
        }
    </script>
</head>
<body>


<!--onfocus  获取光标事件-->
<input type="text" id="timer" οnfοcus="start()">
<!--单击鼠标事件-->
<button οnclick="stop()">end</button>


</body>
</html>

 

DOM对象

什么是HTML  DOM

  •     HTML  Document Object Model(文档对象模型)
  •     HTML DOM 定义了访问和操作HTML文档的标准方法

    HTML DOM 把 HTML 文档呈现为带有元素、属性和文本的树结构(节点树)

DOM

 

画dom树是为了展示文档中各个对象之间的关系,用于对象的导航。

DOM节点

节点类型

HTML 文档中的每个成分都是一个节点。

DOM 是这样规定的:
    整个文档是一个文档节点 
    每个 HTML 标签是一个元素节点 
    包含在 HTML 元素中的文本是文本节点 
    每一个 HTML 属性是一个属性节点

其中,document与element节点是重点。attribute是属性节点。

节点关系

节点树中的节点彼此拥有层级关系。
父(parent),子(child)和同胞(sibling)等术语用于描述这些关系。父节点拥有子节点。同级的子节点被称为同胞(兄弟或姐妹)。

  •     在节点树中,顶端节点被称为根(root)
  •     每个节点都有父节点、除了根(它没有父节点)
  •     一个节点可拥有任意数量的子
  •     同胞是拥有相同父节点的节点

下面的图片展示了节点树的一部分,以及节点之间的关系:


访问 HTML 元素(节点),访问 HTML 元素等同于访问节点,我们能够以不同的方式来访问 HTML 元素。

节点查找

直接查找节点(全局查找,如果要找某个节点下的节点,先定位全局下的这个某个节点)

document.getElementById(“idname”)
document.getElementsByTagName(“tagname”)
document.getElementsByName(“name”)
document.getElementsByClassName(“name”) 
<body>

<p>hello P</p>
<div class="c1">
    <div class="c2">c22222</div>
    <p>c1----PPPP</p>
</div>
<a href="#" id="ID1"></a>

<script>
        var eles=document.getElementById("ID1");
        console.log(eles);
        eles=document.getElementsByTagName("p");
        console.log(eles[0]);

</script>
<body>
View Code

导航节点属性

注意,js中没有办法找到所有的兄弟标签!

'''

parentElement           // 父节点标签元素

children                // 所有子标签

firstElementChild       // 第一个子标签元素

lastElementChild        // 最后一个子标签元素

nextElementtSibling     // 下一个兄弟标签元素

previousElementSibling  // 上一个兄弟标签元素

'''
<head>
    <meta charset="UTF-8">
    <title></title>
    <style>
      .item  .c1{
            display: none;
        }
    </style>
</head>
<body>

<div>
    <div class="item">
        <p οnclick="foo(this)">菜单一</p>
        //this将<p>标签本身当做参数传入函数
        <div class="c1">111111</div>
    </div>
    <div class="item">
        <p οnclick="foo(this)">菜单二</p>
        <div class="c1">111111</div>
    </div>
    <div class="item">
        <p οnclick="foo(this)">菜单三</p>
        <div class="c1">11111111</div>
    </div>
</div>
<script>
    
        function foo(self){
            // alert(1234)
            // console.log(self)  //  指代的当前操作标签
//             console.log(self.nextElementSibling);
//            var ele=self.nextElementSibling;
//            ele.style.display="block";


// 思路1      查找上一级父类标签
//            console.log(self.parentElement);
//            var eles=document.getElementsByClassName("c1");
//            for (var i=0;i<eles.length;i++){
//                // console.log(eles[i])
//                eles[i].style.display="none";
//            }
//            self.nextElementSibling.style.display="block";
//思路二      查找父类标签的父类标签
//            var eles=self.parentElement.parentElement.children;
//            console.log(eles)
//思路三       查找父类标签的上下兄弟标签
             var eles=self.parentElement.previousElementSibling;
             console.log(eles)
        }



</script>
</body>
菜单查找标签

 

节点操作

创建节点:

1
createElement(标签名) :创建一个指定名称的元素。

例:var  tag=document.createElement(“input")
            tag.setAttribute('type','text');

添加节点:只能在父节点的子节点追加(somenode是父节点)

追加一个子节点(作为最后的子节点)

somenode.appendChild(newnode) 

把增加的节点放到某个节点的前边

somenode.insertBefore(newnode,某个节点);

删除节点:

removeChild():获得要删除的元素,通过父元素调用删除

替换节点:

somenode.replaceChild(newnode, 某个节点);通过父元素调用替换

节点属性操作:

1、获取和赋值文本节点的值:innerText(只拿最终的文本)    innerHTML(可以取包含文本的标签)

elementNode.innerText = ' '

2、attribute操作elementNode元素节点

     elementNode.setAttribute(name,value)    

     elementNode.getAttribute(属性名)        <-------------->elementNode.属性名(DHTML语法,取值设值)

     elementNode.removeAttribute(“属性名”);

3、value获取当前选中的value值
        1.input  
        2.select (selectedIndex)
        3.textarea 

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<select name=" " id="select" οnchange="foo(this)">
    //内容改变,触发onchange
    <option value="111">河南省</option>
    <option value="222">陕西省</option>
    <option value="333">山东省</option>
</select>
<script>
    var ele=document.getElementById("select");
        console.log(ele);
    function foo(self) {
        console.log(self); //返回下拉框的标签
        console.log(self.selectedIndex);//返回下拉框选择项的索引值
    }
</script>
</body>
</html>
select value

4、innerHTML 给节点添加html代码:
该方法不是w3c的标准,但是主流浏览器支持
        tag.innerHTML = “<p>要显示内容</p>”;

5、关于class的操作:

elementNode.className
//返回字符串
elementNode.classList.add
elementNode.classList.add('btn','btn-info')
//返回数组 elementNode.classList.remove
//返回数组

 6、改变css样式:

<p id="p2">Hello world!</p>

document.getElementById("p2").style.color="blue";

                             .style.fontSize=48px//所有在css中-的方法,去掉-,把首字母的大写

DOM Event(事件)

事件类型

onclick        当用户点击某个对象时调用的事件句柄。
ondblclick     当用户双击某个对象时调用的事件句柄。

onfocus        元素获得焦点。               练习:输入框
onblur         元素失去焦点。               应用场景:用于表单验证,用户离开某个输入框时,代表已经输入完了,我们可以对它进行验证.
onchange       域的内容被改变。             应用场景:通常用于表单元素,当元素内容被改变时触发.(三级联动)

onkeydown      某个键盘按键被按下。          应用场景: 当用户在最后一个输入框按下回车按键时,表单提交.
onkeypress     某个键盘按键被按下并松开。
onkeyup        某个键盘按键被松开。

onload         一张页面或一幅图像完成加载。

onmousedown    鼠标按钮被按下。
onmousemove    鼠标被移动。
onmouseout     鼠标从某元素移开。
onmouseover    鼠标移到某元素之上。
onmouseleave   鼠标从元素离开

onselect       文本被选中。
onsubmit       确认按钮被点击。

 

绑定事件方式

方式1:

<div id="div" οnclick="foo(this)">点我呀</div>

<script>
    function foo(self){           // 形参不能是this;
        console.log("点你大爷!");
        console.log(self);   
    }
</script>

方式2:

<p id="abc">试一试!</p>

<script>

    var ele=document.getElementById("abc");

    ele.onclick=function(){
        console.log("ok");
        console.log(this);    // this直接用
    };

</script>

 绑定方法:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title></title>
</head>
<body>
<div οnclick="alert(456)" style="color: red">DIV</div>
<div οnclick="foo(456)" style="color: red">DIV</div>

<p>PPP</p>
<p>PPP</p>
<p>PPP</p>

<button>click</button>
<script>
     // 绑定方式一
//     function foo(self){
//         console.log(self);
//     }

//绑定方式二 标签对象.事件=function(){};

//      var ele =document.getElementsByTagName("p")[0];
//      ele.οnclick=function(){
//          console.log(this);//this指自己标签本身
//          alert(this.innerText);
//          //alert(123);
//      };

// var eles =document.getElementsByTagName("p");
//    for (var i=0;i<eles.length;i++){
//        eles[i].οnclick=function(){
//            alert(789);
//        }
//    }

</script>

</body>
</html>
绑定方法

事件介绍:
1、onclick ondblclick

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title></title>
</head>
<body>
<div οnclick="alert('单击事件')">单击事件</div>
<div οndblclick="alert('双击事件')">双击事件</div>
<input type="text" value="请输入姓名" οnfοcus="enter(this)" οnblur="exit(this)">
<script>
    function enter(self){
       self.value="";
    }
    function exit(self){
        if(self.value.trim()==""){
             self.value="请输入姓名";
        }
    }
</script>

</body>
</html>
View Code

2、onchange  onfocus

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

<select name="" class="select_pro">
    <option value="1">河南省</option>
    <option value="2">湖南省</option>
    <option value="3">云南省</option>
</select>

<select name=""  class="select_city"></select>

<script>
    var info={"河南省":["郑州","洛阳","开封"],"湖南省":["湘潭","长沙","岳阳"],"云南省":["大理","昆明"]}

    var ele=document.getElementsByClassName("select_pro")[0];
    var ele_2=document.getElementsByClassName("select_city")[0]; ele.οnchange=function(){ var arrs=ele.children; // console.log(arrs); // console.log(this.selectedIndex);//返回选择的select的选项索引值 var sindex=this.selectedIndex;//取到选项的索引值 var province=arrs[sindex].innerText;//取到选项的文本 var citys_arr=info[province]; //console.log(citys_arr); // ["","",""]城市的数组 var ele2_children=ele_2.children;//清空select的子元素 for (var j=0;j<ele2_children.length;j++){//省份选择变换时,清空上一个选项创建的标签 ele_2.removeChild(ele2_children[0]) } // ----- ele_2.options.length=0; // DHML清空select的子元素 // console.log(ele_2.options); for (var i=0;i<citys_arr.length;i++){ var option=document.createElement("option");//创建标签 option.innerText=citys_arr[i];//向标签内添加文本 // console.log(option); ele_2.appendChild(option);//将标签添加进select标签内  } } </script> </body> </html>
onchange二级联动
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title></title>
    <script>

        var ID;
        function start() {
            if (ID == undefined) {
                bar();
                ID = setInterval(bar, 1000); // 123
            }
        }
        function bar(){

            // 获取当前时间字符串
            var curr_time=new Date();
            var s_time=curr_time.toLocaleString();

            // 找到标签,然后对其value赋值
            var ele=document.getElementById("timer");
            ele.value=s_time;

        }
        function stop(){
            clearInterval(ID);
            ID=undefined;
        }

    </script>
</head>
<body>


<!--onfocus  获取光标事件-->
<input type="text" id="timer" οnfοcus="start()">
<!--单击鼠标事件-->
<button οnclick="stop()">end</button>


</body>
</html>
onfocus

3、onload:

onload 属性开发中只给body元素加,这个属性的触发标志着页面内容被加载完成。应用场景: 当有些事情我们希望页面加载完立刻执行,那么可以使用该事件属性。

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

    <script>
        //整个页面加载完再执行
        window.οnlοad=function(){
            var ele=document.getElementsByTagName("p")[0];
            ele.style.color="red";
        }
    </script>
</head>
<body>

<p>PPP</p>

</body>
</html>
View Code

4、onsubmit:

是当表单在提交时触发. 该属性也只能给form元素使用.应用场景: 在表单提交前验证用户输入是否正确.如果验证失败.在该方法中我们应该阻止表单的提交.

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title></title>
</head>
<body>
<form action="" method="post" id="form">
    用户名:<p><input type="text" name="user"></p>
    密码:<p><input type="password" name="pwd"></p>
    <p><input type="submit" value="submit"></p>
</form>

<script>
    var ele=document.getElementById("form");
    ele.onsubmit=function(e){//e即绑定event事件
        alert(123);
        // 阻止默认事件发生的方式一:
        // return false

        // 阻止默认事件发生的方式二:
        e.preventDefault()//event是一个封装了当前事件状态的对象
    }
</script>
</body>
</html>
View Code

5、onselect:

文本被选中时触发。

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

<input type="text" value="1230">

<script>
    var ele=document.getElementsByTagName("input")[0];
    ele.onselect=function(){
        alert(123)
    }
</script>
</body>
</html>
View Code

6、onkeydown      某个键盘按键被按下

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

<input type="text" id="d1">

<script>
    var ele=document.getElementById("d1");
    ele.onkeyup=function(e){
        var num=e.keyCode;//取出按下的键
        var alph=String.fromCharCode(num);//将按下的键对应的数值转化成字母
        alert(e.keyCode+"----"+alph);
    }

</script>
</body>
</html>
View Code

7、onmouseout鼠标从某元素移开  onmouseover鼠标移到某元素之上  onmouseleave鼠标从元素离开

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title></title>
    <style>
        .div1{
            width: 200px;
            height: 100px;
            background-color: darkgreen;
        }
    </style>
</head>
<body>

<div class="div1">
DIV
</div>


<script>
    var ele=document.getElementsByClassName("div1")[0];
    ele.onmouseover=function(){
        this.style.color="white";//鼠标移到某元素之上
        this.style.cursor="pointer";//鼠标指针变成小手
    };

     ele.onmouseleave=function(){
        this.style.color="black";//鼠标从元素离开
    };

    ele.onmousedown=function(){
        this.style.color="red";//鼠标按钮被按下
    }
</script>
</body>
</html>
View Code

8、onmouseout与onmouseleave事件的区别:
因为mouseout事件是会冒泡的,也就是onmouseout事件可能被同时绑定到了container的子元素title和list 上,所以鼠标移出每个子元素时也都会触发我们的list.style.display="none";
1.不论鼠标指针离开被选元素还是任何子元素,都会触发 mouseout 事件。

2.只有在鼠标指针离开被选元素时,才会触发 mouseleave 事件。

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

    <style>
        #container{
            width: 300px;
            background-color: purple;
            text-align: center;
        }
        #title{
            line-height: 50px;
        }

        #list{
            display: none;
        }
        #list div{
            line-height: 50px;
        }
        #list .item1{
            background-color: green;
        }

        #list .item2{
            background-color: yellow;
        }

        #list .item3{
            background-color: blue;
        }
    </style>
</head>
<body>

<div id="container">
    <div id="title">mouseout演示</div>
    <div id="list">
        <div class="item1">111</div>
        <div class="item2">222</div>
        <div class="item3">333</div>
    </div>
</div>


<script>

    var container=document.getElementById("container");
    var list=document.getElementById("list");
    var title=document.getElementById("title");

    title.onmouseover=function(){
        list.style.display="block";//鼠标移到某元素之上
    };

    container.onmouseleave=function(){
        list.style.display="none";
    };

//    lcontainer.οnmοuseοut=function(){
//        list.style.display="none";//
//    }
//
//因为mouseout事件是会冒泡的,也就是onmouseout事件可能被同时绑定到了container的子元素title和list
//上,所以鼠标移出每个子元素时也都会触发我们的list.style.display="none";
//
// 1.不论鼠标指针离开被选元素还是任何子元素,都会触发 mouseout 事件。
// 2.只有在鼠标指针离开被选元素时,才会触发 mouseleave 事件。


</script>
</body>
</html>
View Code

9、事件传播

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

    <style>
        .outer{
            width: 200px;
            height: 200px;
            background-color: red;

        }
         .inner{
            width: 100px;
            height: 100px;
            background-color: yellow;
        }
    </style>
</head>
<body>

<div class="outer">
    <div class="inner"></div>
</div>

<script>
    var ele=document.getElementsByClassName("outer")[0];
    ele.onclick=function(){
        alert(123);
    };

     var ele2=document.getElementsByClassName("inner")[0];
     ele2.onclick=function(e){
        alert(456);
        // e.stopPropagation();//阻止123出现,不加的点子类标签,先出现456,再出现123
    }
</script>
</body>
</html>
事件传播

 

  

 

程序练习

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        *{
            margin: 0;
        }
        .back{
            height: 1200px;
            width: 100%;
            background-color:cornsilk;
        }
        .shade{
            position: fixed;
            top: 0;
            bottom: 0; left: 0; right: 0; background-color:white ; opacity:0.4 ; } .model{ position: fixed; width: 400px; height: 400px; background-color: green; top: 50%; left: 50%; margin-left:-200px ; margin-top: -200px; text-align: center; } .con{ margin-top:100px ; } .hide{ display: none; } </style> </head> <body> <div class="back"> <button οnclick="start()">start</button> </div> <div class="shade hide"></div>//遮罩层 <div class="model hide"> <div class="con"> 用户名:<input type="text"> <button οnclick="stop">取消</button> </div> </div>//对话框 <script> function stop() { var ele=document.getElementsByClassName("shade")[0]; var ele2=document.getElementsByClassName("models")[0]; ele.classList.add("hide"); ele2.classList.add("hide"); } function start() { var ele=document.getElementsByClassName("shade")[0]; var ele2=document.getElementsByClassName("models")[0]; if(act=="show"){ ele.classList.remove("hide"); ele2.classList.remove("hide"); }else { ele.classList.add("hide"); ele2.classList.add("hide"); } } </script> </body> </html>
模态对话框
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title></title>
</head>
<body>

<select name="" class="select_pro">
    <option value="1">河南省</option>
    <option value="2">湖南省</option>
    <option value="3">云南省</option>
</select>

<select name=""  class="select_city"></select>

<script>
    var info={"河南省":["郑州","洛阳","开封"],"湖南省":["湘潭","长沙","岳阳"],"云南省":["大理","昆明"]}

    var ele=document.getElementsByClassName("select_pro")[0];
    var ele_2=document.getElementsByClassName("select_city")[0]; ele.οnchange=function(){ var arrs=ele.children; // console.log(arrs); // console.log(this.selectedIndex);//返回选择的select的选项索引值 var sindex=this.selectedIndex;//取到选项的索引值 var province=arrs[sindex].innerText;//取到选项的文本 var citys_arr=info[province]; //console.log(citys_arr); // ["","",""]城市的数组 var ele2_children=ele_2.children;//清空select的子元素 for (var j=0;j<ele2_children.length;j++){//省份选择变换时,清空上一个选项创建的标签 ele_2.removeChild(ele2_children[0]) } // ----- ele_2.options.length=0; // DHML清空select的子元素 // console.log(ele_2.options); for (var i=0;i<citys_arr.length;i++){ var option=document.createElement("option");//创建标签 option.innerText=citys_arr[i];//向标签内添加文本 // console.log(option); ele_2.appendChild(option);//将标签添加进select标签内  } } </script> </body> </html>
onchange二级联动
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8"> <title></title> </head> <body> <button class="all">全选</button> <button class="reverse">反选</button> <button class="cancel">取消</button> <hr> <table border="2px" class="server_tb"> <tr> <td><input type="checkbox" class="item"></td> <td>1111</td> <td>1111</td> <td>1111</td> </tr> <tr> <td><input type="checkbox" class="item"></td> <td>1111</td> <td>1111</td> <td>1111</td> </tr> <tr> <td><input type="checkbox" class="item"></td> <td>1111</td> <td>1111</td> <td>1111</td> </tr> <tr> <td><input type="checkbox" class="item"></td> <td>1111</td> <td>1111</td> <td>1111</td> </tr> <script> var ele_all=document.getElementsByClassName("all")[0]; var ele_reverse=document.getElementsByClassName("reverse")[0]; var ele_cancel=document.getElementsByClassName("cancel")[0]; var input_arr=document.getElementsByClassName("item"); eles=document.getElementsByTagName("button"); for(var i=0;i<eles.length;i++){ //console.log(eles[i]); eles[i].οnclick=function(){ for (var j=0;j<input_arr.length;j++){ console.log(this); if(this.innerText=="全选"){ input_arr[j].checked=true; } else if(this.innerText=="取消"){ input_arr[j].checked=false; } else{ if(input_arr[j].checked){ input_arr[j].checked=false; } else{ input_arr[j].checked=true; } } } } } // ele_all.οnclick=function(){ // for(var i=0;i<input_arr.length;i++){ // console.log(input_arr[i]); // var input=input_arr[i]; // input.checked=true; // } // }; // // ele_cancel.οnclick=function(){ // for(var i=0;i<input_arr.length;i++){ // console.log(input_arr[i]); // var input=input_arr[i]; // input.checked=false; // } // }; // // ele_reverse.οnclick=function(){ // for(var i=0;i<input_arr.length;i++){ // console.log(input_arr[i]); // var input=input_arr[i]; // if(input.checked){ // input.checked=false; // } // else{ // input.checked=true; // } // } // } </script> </table> </body> </html>
表格案例
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        h1{
            background-color: darkgray;
            color: red;
            text-align: center;
            line-height: 50px;
        }
    </style>
</head>
<body>
    <h1 class="title">欢迎方绍伟</h1>
    <button οnclick="test()">click</button>
    <script>
        function test() {
            var ele=document.getElementsByClassName("title")[0];
            var content=ele.innerText;
            var first_char=content.charAt(0);
            var later_string=content.substring(1,content.length);
            var new_content=later_string+first_char;
            ele.innerText= new_content;
            setInterval(test,1000);
        }


    </script>
</body>
</html>
跑马灯

 左移右移         

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
<style>
    span{
        display: inline-block;
        width: 100px;
        height: 40px;
        background-color: palevioletred;
        text-align: center;
        line-height: 40px;
        vertical-align: top;
    }
</style>
</head>
<body>
<select name="" id="left" multiple="3">
    <option value="">大上海</option>
    <option value="">狼图腾</option>
    <option value="">大主宰</option>
</select>
<span>
    <button id="move"> > </button>
    <button id="move_all"> >> </button>
</span>
<select name="" id="right" multiple="3">
    <option value="">西游记</option>
</select>

<script>
    var move=document.getElementById("move");
    var move_all=document.getElementById("move_all");
    var left=document.getElementById("left");
    var right=document.getElementById("right");
    var option_arr=left.options;//select的选项元素,获取全部选项
    console.log(option_arr);
    move.onclick=function () {
        for (var i=0;i<option_arr.length;i++){
            var option=option_arr[i];
            if (option.selected){
                //判断选中的选项
                right.appendChild(option);
                i--;
            }
        }
    }

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

 

 

 js扩展                                               

 js的作用域链与词法分析

变量的作用域是在声明时决定的而不是调用执行时决定;

当函数调用的前一瞬间,先形成一个激活对象,叫Avtive Object, AO并会分析以下3个方面的东西:

1:参数

2:局部变量声明

3:函数声明表达式

函数内部无论是使用参数,还是使用局部变量,都到AO上找.

function f(a,b){
        var a=12;
        console.log(a);

        console.log(b)
    }
    f(5);

/*
*
       js执行顺序 // 词法分析阶段
       激活AO(active object)        
       词法分析(预编译过程)
       AO.a=undefined  AO.b=undefined

      // 分析参数

        AO.a = 5
        AO.b = undefined

        // 分析变量声明
        AO.a = undefined 已存在,不做任何影响.

        // 函数声明表达式
        无 不影响分析

        // 函数执行阶段
        AO.a = 12

        console.log(AO.a) ==> 12
        console.log(AO.y) ==> undefined
*
* */

 1. 全局作用域(Global Scope)

在代码中任何地方都能访问到的对象拥有全局作用域,一般来说一下几种情形拥有全局作用域:

(1)最外层函数和在最外层函数外面定义的变量拥有全局作用域

var name="yuan";

    function foo(){
        var age=23;
        function inner(){
            console.log(age);
        }

        inner();
    }

    console.log(name);    // yuan
    //console.log(age);   // Uncaught ReferenceError: age is not defined
    foo();                // 23
    inner();              // Uncaught ReferenceError: inner is not defined

(2)所有末定义直接赋值的变量自动声明为拥有全局作用域,例如:

var name="yuan";

    function foo(){
        age=23;

        var sex="male"
    }
    foo();
    console.log(age);   //  23
    console.log(sex);   // sex is not defined

变量age拥有全局作用域,而sex在函数外部无法访问到。

(3)所有window对象的属性拥有全局作用域

一般情况下,window对象的内置属性都都拥有全局作用域,例如window.alert()、window.location、window.top等等。

2. 局部作用域(Local Scope)

和全局作用域相反,局部作用域一般只在固定的代码片段内可访问到,最常见的例如函数内部,所有在一些地方也会看到有人把这种作用域成为函数作用域.

如示例1中的age与inner都只有局部作用域。(js中if、for没有自己的作用域)

作用域链(Scope Chain)

在JavaScript中,函数也是对象,实际上,JavaScript里一切都是对象。函数对象和其它对象一样,拥有可以通过代码访问的属性和一系列仅供JavaScript引擎访问的内部属性。其中一个内部属性是[[Scope]],由ECMA-262标准第三版定义,该内部属性包含了函数被创建的作用域中对象的集合,这个集合被称为函数的作用域链,它决定了哪些数据能被函数访问。

示例演示

function bar(age) {

        console.log(age);
        var age = 99;
        var sex= 'male';
        console.log(age);
        function age() {
            alert(123)
        };
        console.log(age);
        return 100;
}

result=bar(5);

结果分析

我相信大家一定会有想不到的结果,接下来我们就以最复杂的例3来分析整个过程。

当一个函数创建后,它的作用域链会被创建此函数的作用域中可访问的数据对象填充。在函数bar创建时,它的作用域链中会填入一个全局对象,该全局对象包含了所有全局变量,如下图所示:

 解析到函数调用时,即bar(5),会生成一个active object的对象,该对象包含了函数的所有局部变量、命名参数、参数集合以及this,然后此对象会被推入作用域链的前端,当运行期上下文被销毁,活动对象也随之销毁。新的作用域链如下图所示:

 

 过程解析:

function bar(age) {

        console.log(age);
        var age = 99;
        var sex="male";
        console.log(age);
        function age(){
            alert(123);
        } ;
        console.log(age);
        return 100;
}

result=bar(5);

一 词法分析过程(涉及参数,局部变量声明,函数声明表达式):
    1-1 、分析参数,有一个参数,形成一个 AO.age=undefine;
    1-2 、接收参数 AO.age=5;
    1-3 、分析变量声明,有一个 var age, 发现 AO 上面有一个 AO.age ,则不做任何处理
    1-4 、分析变量声明,有一个 var sex,形成一个 AO.sex=undefine;
    1-5 、分析函数声明,有一个 function age(){} 声明, 则把原有的 age 覆盖成 AO.age=function(){};
二 执行过程:
    2-1 、执行第一个 console.log(age) 时,当前的 AO.age 是一个函数,所以输出的一个函数
    2-2 、这句 var age=99; 是对不 AO.age 的属性赋值, AO.age=99 ,所以在第二个输出的age是 99;
    2-3 、同理第三个输出的是 99, 因为中间没有改变 age 值的语句了。

          注意:执行阶段:
                        function age(){
                            alert(123)
                        } ;

            不进行任何操作,将执行语句复制给age这部操作是在词法分析时,即运行前完成的。

 

 

 

 

 

 

 

转载于:https://www.cnblogs.com/domestique/p/6906576.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值