zoukankan      html  css  js  c++  java
  • day048&049 JavaScript之BOM和DOM(属性操作,节点操作)

    本节内容:

    1、BOM(browser object model)
    2、DOM(document object model)
    2.1 文档树
    2.2 DOM对象
    2.3 查找标签
    2.4 标签控制
    

    一、BOM对象

    1、window对象

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

    2、Window 对象方法

    alert()            显示带有一段消息和一个确认按钮的警告框。
    confirm()          显示带有一段消息以及确认按钮和取消按钮的对话框。
    prompt()           显示可提示用户输入的对话框。
    
    open()             打开一个新的浏览器窗口或查找一个已命名的窗口。
    close()            关闭浏览器窗口。
    
    setInterval()      按照指定的周期(以毫秒计)来调用函数或计算表达式。
    clearInterval()    取消由 setInterval() 设置的 timeout。
    setTimeout()       在指定的毫秒数后调用函数或计算表达式。
    clearTimeout()     取消由 setTimeout() 方法设置的 timeout。
    scrollTo()         把内容滚动到指定的坐标。
    
    Js

    3、方法的使用

    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的窗口
        //close方法  将当前文档窗口关闭.
            //close();
    
    Js

    2、setInterval,clearInterval

    setInterval() 方法会不停地调用函数,直到 clearInterval() 被调用或窗口被关闭。
    由 setInterval() 返回的 ID 值可用作 clearInterval() 方法的参数。
    
    语法:<br data-filtered="filtered">     setInterval(code,millisec)
    其中,code为要调用的函数或要执行的代码串。millisec周期性执行或调用 code 之间的时间间隔,以毫秒计。
    
    Js

    定时器

    <script>
        function foo(){
            console.log(123)
        }
        // 设置定时器
        let ID=setInterval(foo,1000);  // 每隔一秒执行一次foo函数,1000的单位为毫秒
        let ID2=setInterval(function(){
            console.log(234)
        },1000);  // 这里是每个一秒执行一次函数
        console.log(ID);
        console.log(ID2);
    
        // 取消定时器
        clearInterval(1);
    </script>
    
    Js

    计时器

    <script>
    
        // 设置一个计时器
    
        // 创建时间字符串
        function showTime() {
            let now = Date().toLocaleString();
            console.log(now);
            // 查找input标签
            let jishiqi = document.getElementById('jishiqi');
            jishiqi.value=now;
        }
    
        var ID;  // 定义一个全局变量,这样才可以大家一起使用、引用这个变量
        // 设置计时器函数
        function setTimer(){
            if (ID==undefined){  // 限制其只能开一个计时器
                showTime();   // 消除第一次点击要等一秒再显示
                ID=setInterval(showTime,1000);
             }
        }
    
        // 关闭计时器
        function stopTimer() {
            clearInterval(ID);
            ID=undefined;
        }
    </script>
    
    </head>
    <body>
    
    // 用buttom来触发事件,onclick来触发,但不推荐使用,
    // 1、因为写在属性,分不清数属性还是js,没有解耦合  2、代码复用是不方便
    <input type="text" id="jishiqi" class="c1"><button onclick="setTimer()">start</button>
    <button onclick="stopTimer()">end</button>
    </body>
    </html>
    
    Js

    二、BOM对象

    1、什么是HTML DOM

    HTML  Document Object Model(文档对象模型)
    HTML DOM 定义了访问和操作HTML文档的标准方法
    HTML DOM 把 HTML 文档呈现为带有元素、属性和文本的树结构(节点树)
    

    2、DOM树(显示文档中各对象之间的关系)

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

    3、DOM节点

    1、节点类型

    HTML 文档中的每个成分都是一个节点。
    document与element节点是重点。
    
    DOM 是这样规定的:
        整个文档是一个文档节点
        每个 HTML 标签是一个元素节点
        包含在 HTML 元素中的文本是文本节点
        每一个 HTML 属性是一个属性节点
    

    2、节点关系(可用于后面的导航查询)

    节点树中的节点彼此拥有层级关系。
    父(parent),子(child)和同胞(sibling)等术语用于描述这些关系。
    父节点拥有子节点。同级的子节点被称为同胞(兄弟或姐妹)。
    
    在节点树中,顶端节点被称为根(root)
    每个节点都有父节点、除了根(它没有父节点)
    一个节点可拥有任意数量的子
    同胞是拥有相同父节点的节点
    

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

    4、DOM对象—-仅看看两个关键的(节点)

    document对象是整个文档对象,可以用来获取element对象(标签对象)
    

    1、document对象

    document 对象是 HTMLDocument(继承自 Document 类型)的一个实例,表示整个 HTML 页面。
    而且, document 对象是 window 对象的一个属性,因此可以将其作为全局对象来访问。
    

    2、element对象

    就是每一个标签对象
    

    5、查找HTML标签(通过上面两个对象)

    1、直接查找

    通过document拿到element对象,找到对应标签
    语法:
    let ele=document.getElementById("id2");
    声明一个变量接收你通过document拿到的element标签对象。从而找到标签
    
    document.getElementById();    // 一个element对象
    document.getElementsByClassName(); // 多个element对象构成的数组
    document.getElementsByTagName(); // 多个element对象构成的数组
    document.getElementsByName(); // 多个element对象构成的数组
    
    var c1=document.getElementsByClassName("c1")[0];  // 拿出数组的第一个element对象
    console.log("c1",c1);
    var c2=c1.getElementsByClassName("c2")[0];
    console.log(c2)
    
    JavaScript

    2、导航查找

    parentElement            父节点标签元素
    children                 所有子标签
    firstElementChild        第一个子标签元素
    lastElementChild         最后一个子标签元素
    nextElementSibling       下一个兄弟标签元素
    previousElementSibling   上一个兄弟标签元素
    

    6、HTML标签控制(重点)

    1、文本控制

    对标签的文本进行的两种操作:
    1、获取文本
    2、赋值文本
    

    文本控制

    <body>
    
    <ul>
        <li id="i1">123</li>
        <li id="i2"><a href="">123</a>你好</li>
        <li>456</li>
        <li>789</li>
    </ul>
    
    <script>
    
        let ele=document.getElementById("i2");
        // 获取文本
        console.log(ele.innerHTML);  // 将标签内包含的所有内容变成字符串
        console.log(ele.innerText);  // 只拿到所有的文本
    
        // 赋值文本,清空标签内的内容(一切)后再赋值
        // ele.innerHTML="yuan";
        // ele.innerText="yuan";  // 这两个看不出效果
        // 这两个可以了
        ele.innerHTML="<a href=''>yuan</a>";  // 浏览器会渲染标签,显示文本
        ele.innerText="<a href=''>shuying</a>"  // 将所有内容,显示成文本
    
    </script>
    </body>
    </html>
    
    HTML

    2、属性控制

    attribute操作
    ele.setAttribute("egon","123");
    ele.getAttribute("egon");
    ele.removeAttribute("alex")  ;
    
    <script>
        // 使用js对html的属性进行操作
    
        let ele=document.getElementById("i1");  // 拿到标签对象
        let ele2=document.getElementById("id2");
        ele.setAttribute("egon","1223");  // 设置标签的属性
        ele.getAttribute("egon");
        ele.removeAttribute("egon");  // 移除这个属性
        ele2.value;
        ele2.value=0
    
    </script>
    
    HTML

    3、class属性控制

    通过element对象.classList.add('c4'),来添加一个类属性
    element对象.classList.remove('c4'),来删除一个类属性
    

    class属性控制代码示例

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <style>
            .c1{
                background-color: hotpink;
            }
            .c2{
                color:yellow;
            }
            .c3{
                font-size:38px;
            }
        </style>
    
    </head>
    <body>
    
    <div class="c1">shuying</div>
    
    <script>
    
        // 用js对HTML的class进行增删
        var ele=document.getElementsByClassName("c1")[0];  // 拿到标签对象
        ele.classList.add("c3");  // 在原class基础上,添加一个c3
        ele.classList.remove("c2")  // 删除属性的c2类
    
    </script>
    </body>
    </html>
    
    HTML

    4、css控制

    通过js来操作css样式
    

    js来操作css样式代码示例

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <style>
    
        </style>
    
    </head>
    <body>
    
    <div class="c1">shuying</div>
    
    <script>
    
        // 用js对css的样式进行修改, 通过对象.style.样式="具体值"
        var ele=document.getElementsByClassName("c1")[0];
        ele.style.color='red';
        ele.style.fontSize="38px"
    
    </script>
    </body>
    </html>
    
    HTML

    5、value属性操作

    只有三个标签有value值:
    input
    select
    textarea
    

    名字

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
    <form action="">
        姓名:
        <input type="text" name="user" value="" id="i1">  # value值为输入的内容
        <hr>
        籍贯:
        <select name="pro" id="i2" multiple="multiple">
            <option value="1">湖北省</option>
            <option value="2">湖南省</option>
            <option value="3">河南省</option>
        </select>
        <hr>
        简介:
        <textarea name="info" id="i3" cols="30" rows="10">  # value值为输入的内容
    
        </textarea>
        <hr>
        <input type="submit">
    </form>
    
    <script>
             let i1=document.getElementById("i1");
             let i2=document.getElementById("i2");
             let i3=document.getElementById("i3");
    
             console.log(i1.value);
             console.log(i2.value);
             console.log(i3.value);
    </script>
    </body>
    </html>
    
    HTML

    7、节点(即标签)的增删改查(重点)

    1、创建节点:
    
        createElement(标签名) :创建一个指定名称的元素。
    
        例:var  tag=document.createElement("input")  // 新建一个空标签
                    tag.setAttribute('type','text');  // 添加相关属性
    
    2、添加节点:
    
        追加一个子节点(作为最后的子节点)
        somenode.appendChild(newnode)
    
        把增加的节点放到某个节点的前边
        somenode.insertBefore(newnode,某个节点);
    
    3、删除节点:
    
        removeChild():获得要删除的元素,通过父元素调用删除
    
    4、替换节点:
    
        somenode.replaceChild(newnode, 某个节点);
    
    Js

    添加、删除、替换节点示例

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>  // 尽量不要用body作为父标签
    <div class="p1">
        <h3 class="title">WELCOME!</h3>  // 被替换的节点
    </div>
    <hr>
    <div class="c1">
        <div><button class="add">一 展示图片</button></div>
    </div>
    <hr>
    <div class="c2">
        <button class="rem">删除节点 </button>
        <h4>欢迎删除,圣诞快乐!</h4>
    </div>
    <hr>
    <div class="c3">
        <button class="replace">替换节点 </button>
    </div>
    
    <script>
         // 1 创建节点添加节点
        let ele=document.getElementsByClassName("add")[0];
        ele.onclick=function () {
                 // 1 创建节点对象  <img src="imgs/圣诞老人.png" alt="" width="200" height="200">
                 let img=document.createElement("img") ; // <img >
                 img.setAttribute("src","imgs/圣诞老人.png");// <img src="imgs/圣诞老人.png">
                 img.setAttribute("width","200");
                 img.setAttribute("height","200");//  <img src="imgs/圣诞老人.png" alt="" width="200" height="200">
                 console.log(img);
                // 2  添加节点  父节点.appendchild(添加节点)
                let pele=document.getElementsByClassName("c1")[0];
                pele.appendChild(img)
    
        };
        // 2 删除节点   父节点.removeChild(删除节点)
        let ele2=document.getElementsByClassName("rem")[0];
        ele2.onclick=function () {
                let pele2=document.getElementsByClassName("c2")[0];
                pele2.removeChild(this.nextElementSibling);
        };
    
        // 3、替换节点  父节点.replaceChild(新节点,旧节点)
         let ele3=document.getElementsByClassName("replace")[0];
         ele3.onclick=function () {
                 //   父节点
                 let pele3=document.getElementsByClassName("p1")[0];
                 // 新节点
                 let p=document.createElement("p");  //    <p></p>
                 p.innerHTML="深圳欢迎您!";
                // 旧节点
                 let title=document.getElementsByClassName("title")[0];
                 pele3.replaceChild(p,title)
        }
    
    </script>
    
    </body>
    </html>
    
    HTML

    8、DOM event事件

    on监听的意思,
    

    1、事件类型

    onclick        当用户点击某个对象时调用的事件句柄。  (常用,触发按钮)
    ondblclick     当用户双击某个对象时调用的事件句柄。
    
    onfocus        元素获得焦点。       练习:输入框
    onblur         元素失去焦点。       应用场景:用于表单验证,用户离开某个输入框时,代表已经输入完了,我们可以对它进行验证.
    onchange       域的内容被改变。     应用场景:通常用于表单元素,当元素内容被改变时触发.(三级联动)
    
    onkeydown      某个键盘按键被按下。        应用场景: 当用户在最后一个输入框按下回车按键时,表单提交.
    onkeypress     某个键盘按键被按下并松开。  (常用)
    onkeyup        某个键盘按键被松开。
    
    onload         一张页面或一幅图像完成加载。  应用:script写在head标签里,但想先加载HTML标签,
                                              fe: 在script标签里写 window.onload=function(){ },就会在后面执行
    
    onmousedown    鼠标按钮被按下。
    onmousemove    鼠标被移动。
    onmouseout     鼠标从某元素移开。  (会有可能出bug,推荐使用onmouseleave)
    onmouseover    鼠标移到某元素之上。
    onmouseleave   鼠标从元素离开  (常用)
    
    onselect       文本被选中。
    onsubmit       确认按钮被点击。
    
    Js

    2、事件的绑定

    <p id="abc">试一试!</p>
    
    <script>
    
        var ele=document.getElementById("abc");
    
        ele.onclick=function(){  // 绑定
            console.log("ok");
            console.log(this);    // this直接用
        };
    
    </script>
    
    HTML

    JS的事件示例

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <style>
            .error{
               color: red;
                margin-left: 10px;
            }
        </style>
    <script>
    
        window.onload=function(){   // 先加载HTML标签,后再加载这里,就不再是按代码顺序了
                // 1 创建节点添加节点
                let ele=document.getElementsByClassName("c1")[0];
                ele.onfocus=function () {
                   console.log("获取光标!")
    
                };
                ele.onblur=function () {
                    console.log("退出光标!")
                };
    
                ele.onselect=function () {
                    console.log("正在拷贝该文本!")
                };
    
                 let form=document.getElementById("form");
                 form.onsubmit=function () {
                        // 校验数据
                        let user=document.getElementById("user").value;
                        let email=document.getElementById("email").value;
                        console.log(user,email);
                        if (user.length<5){
                            console.log("长度不够!");
                            document.getElementById("user").nextElementSibling.innerHTML="长度不够";
                             setTimeout(function () {
                                  document.getElementById("user").nextElementSibling.innerHTML="";
                             },1000);
                            return false
    
                        }
                 };
    
        }
    
    </script>
    
    </head>
    <body>
    
    <input type="text" class="c1">
    
    <hr>
    
    <form id="form" action="" method="get">
        <div>
            <label for="user">姓名</label>
            <input type="text" name="user" id="user"><span class="error"></span>
        </div>
          <div>
            <label for="email">邮箱</label>
            <input type="text" name="email" id="email"><span class="error"></span>
        </div>
        <input type="submit">
    </form>
    
    </body>
    </html>
    
    HTML

    三、实例练习

    1、左侧菜单

    名字

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <style>
            *{
                margin: 0;
                padding: 0;
            }
              .left{
                   20%;
                  height: 500px;
                  float: left;
                  background-color: wheat;
              }
    
              .right{
                  float: left;
                   80%;
                  height: 500px;
                  background-color: lightgray;
    
              }
    
               .title{
                   text-align: center;
                   line-height: 40px;
                   background-color: #0e90d2;
                   color: white;
               }
            .item{
                padding: 10px;
            }
    
            .hide{
                display: none;
            }
        </style>
    </head>
    <body>
    
    
    <div class="outer">
          <div class="left">
               <div class="item">
                   <div class="title">菜单一</div>
                   <ul class="con">
                       <li>111</li>
                       <li>111</li>
                       <li>111</li>
                   </ul>
               </div>
              <div class="item">
                   <div class="title">菜单二</div>
                   <ul class="con hide">
                       <li>222</li>
                       <li>222</li>
                       <li>222</li>
                   </ul>
               </div>
              <div class="item">
                   <div class="title">菜单三</div>
                   <ul class="con hide">
                       <li>333</li>
                       <li>333</li>
                       <li>333</li>
                   </ul>
               </div>
          </div>
          <div class="right"></div>
    </div>
    
    
    <script>
    
        var eles_title=document.getElementsByClassName("title");
    
    
    
        for (var i=0;i<eles_title.length;i++){
             eles_title[i].onclick=function(){
    
                 this.nextElementSibling.classList.remove("hide");
    
                 for(var j=0;j<eles_title.length;j++){
    
                     if (eles_title[j]!=this){
                         eles_title[j].nextElementSibling.classList.add("hide")
                     }
    
                 }
    
    
             }
    
        }
    
    </script>
    </body>
    </html>
    
    HTML

    2、搜索框

    代码示例

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    
    
    <script>
    
    function Focus(){
    
        var input=document.getElementById("ID1");
        if (input.value=="请输入用户名"){
            input.value="";
        }
    
    }
    
    function Blurs(){
    
        var ele=document.getElementById("ID1");
        var val=ele.value;
        if(!val.trim()){
    
            ele.value="请输入用户名";
        }
    }
    
    </script>
    </head>
    <body>
        <input id="ID1" type="text" value="请输入用户名" onblur="Blurs()" onfocus="Focus()">
    </body>
    </html>
    
    HTML

    3、模态对话框

    代码示例

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <style>
            .back{
                background-color: white;
                height: 2000px;
            }
    
            .shade{
                position: fixed;
                top: 0;
                bottom: 0;
                left:0;
                right: 0;
                background-color: grey;
                opacity: 0.4;
            }
    
            .hide{
                display: none;
            }
    
            .models{
                position: fixed;
                top: 50%;
                left: 50%;
                margin-left: -100px;
                margin-top: -100px;
                height: 200px;
                 200px;
                background-color: wheat;
    
            }
        </style>
    </head>
    <body>
    <div class="back">
        <input class="c" type="button" value="click">
    </div>
    
    <div class="shade hide handles"></div>
    
    <div class="models hide handles">
        <input class="c" type="button" value="cancel">
    </div>
    
    
    <script>
    
    
        var eles=document.getElementsByClassName("c");
        var handles=document.getElementsByClassName("handles");
        for(var i=0;i<eles.length;i++){
            eles[i].onclick=function(){
    
                if(this.value=="click"){
    
                    for(var j=0;j<handles.length;j++){
    
                        handles[j].classList.remove("hide");
    
                     }
    
                }
                else {
                    for(var j=0;j<handles.length;j++){
    
                        handles[j].classList.add("hide");
                    }
    
                }
            }
        }
    
    </script>
    
    </body>
    </html>
    
    HTML

    4、表格案例

    代码示例

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
    
    <button class="select_all">全选</button>
    <button class="select_reverse">反选</button>
    <button class="cancel">取消</button>
    
    <hr>
    
    <table class="server_table" border="2px" cellspacing="2px">
        <tr>
            <td><input type="checkbox" class="item"></td>
            <td>111</td>
            <td>111</td>
            <td>111</td>
        </tr>
        <tr>
            <td><input type="checkbox" class="item"></td>
            <td>222</td>
            <td>222</td>
            <td>222</td>
        </tr>
        <tr>
            <td><input type="checkbox" class="item"></td>
            <td>333</td>
            <td>333</td>
            <td>333</td>
        </tr>
        <tr>
            <td><input type="checkbox" class="item"></td>
            <td>444</td>
            <td>444</td>
            <td>444</td>
        </tr>
    </table>
    
    
    <script>
    /*
        var ele_all=document.getElementsByClassName("select_all")[0];
        var ele_reverse=document.getElementsByClassName("select_reverse")[0];
        var ele_cancel=document.getElementsByClassName("cancel")[0];
        var input_arr=document.getElementsByClassName("item");
    
        ele_all.onclick=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.onclick=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.onclick=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;
                  }
              }
        };
    
    */
    
    
        var input_arr=document.getElementsByClassName("item");
        var button_arr=document.getElementsByTagName("button");
    
        for(var i=0;i<button_arr.length;i++){
    
            button_arr[i].onclick=function(){
    
    
                for (var j=0;j<input_arr.length;j++){
                     var inp=input_arr[j]
                     if(this.innerText=="全选"){
                         console.log("ok");
                     inp.checked=true;
                 }
                else if(this.innerText=="取消"){
                      inp.checked=false;
                 }
                else {
                     if(inp.checked){
                         inp.checked=false;
                     }else {
                         inp.checked=true;
                     }
                 }
    
                }
            }
    
        }
    </script>
    </body>
    </html>
    
    HTML

    5、select+移动

    代码示例

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    
        <style>
            .outer{
                margin: 0 auto;
                background-color: darkgray;
                 80%;
                height: 600px;margin-top: 30px;
                word-spacing: -5px;
    
            }
    
            #left{
                display: inline-block;
                 100px ;
                height: 140px;
                background-color: wheat;
                text-align: center;
    
    
            }
    
            #choice{
                display: inline-block;
                height: 140px;
                background-color: darkolivegreen;
    
                vertical-align: top;
                padding:0 5px;
    
    
            }
    
            #choice button{
                margin-top: 20px;
            }
    
             #right{
                display: inline-block;
                 100px ;
                height: 140px;
                background-color: wheat;
                text-align: center;
                line-height: 140px;
    
            }
    
        </style>
    </head>
    <body>
    
    
    
    <div class="outer">
    
        <select multiple="multiple" size="5" id="left">
        <option>红楼梦</option>
        <option>西游记</option>
        <option>水浒传</option>
        <option>JinPingMei</option>
        <option>三国演义</option>
    </select>
    
    
    
    
    <span id="choice">
        <button id="choose_move"> > </button><br>
        <button id="all_move"> >> </button>
    </span>
    
    
    
    <select multiple="multiple" size="10" id="right">
        <option>放风筝的人</option>
    </select>
    
    
    </div>
    
    
    
    
    <script>
    
        var choose_move=document.getElementById("choose_move");
        var all_move=document.getElementById("all_move");
    
        var right=document.getElementById("right");
        var left=document.getElementById("left");
        var options=left.options;
    
    
    
        choose_move.onclick=function(){
    
            for (var i=0; i<options.length;i++){
    
                 var option=options[i];
                 if(option.selected==true){
    
                       // var news=option.cloneNode(true);
                       // console.log(news);
    
                       right.appendChild(option);
                       i--;
                 }
             }
        };
    
        all_move.onclick=function(){
    
            for (var i=0; i<options.length;i++){
    
                 var option=options[i];
    
                       right.appendChild(option);
                       i--;
    
             };
        };
    
    
    
    
        /*
       var buttons=document.getElementsByTagName("button");
       for(var i=0;i<buttons.length;i++) {
            buttons[i].onclick = function () {
    
                for (var i = 0; i < options.length; i++) {
    
                    var option = options[i];
    
                    if (this.innerText == ">") {
                        if (option.selected == true) {
    
                            // var news=option.cloneNode(true);
                            // console.log(news);
    
                            right.appendChild(option);
                            i--;
                        }
                    } else {
                        right.appendChild(option);
                        i--;
                    }
                }
            };
        }
    
    
       */
    
    
    </script>
    
    
    </body>
    </html>
    
    HTML

    6、二级联动

    代码示例

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    
    </head>
    <body>
    
    <select name="" id="pros">
        <option value="0">请选择省份</option>
        <option value="1">河北省</option>
        <option value="2">广东省</option>
        <option value="3">湖南省</option>
    </select>
    <select name="" id="citys">
        <option value="">请选择城市</option>
    </select>
    
    <script>
          // 1 数据结构
          let data={
              "1":["石家庄","邯郸","邢台","衡水","保定"],
              "2":["东莞","惠州"," 广州","汕头","深圳"],
              "3":["长沙","张家界","湘潭","娄底"],
          };
    
         let pro=document.getElementById("pros");
         let city=document.getElementById("citys");
         pro.onchange=function () {
             console.log(this.value);
             //2 获取用户选择省份
             let choose_pro=this.value;
             // 3 获取省份对应的城市列表
             let citys=data[choose_pro];
             console.log(citys);
    
             // 清除操作
             city.options.length=1;  // 仅保留一个选项
    
             // 循环添加
             for(var i=0;i<citys.length;i++){
    
                 // 创建option标签
                 let option=document.createElement("option")//    <option></option>
                 option.innerText=citys[i];
                 option.value=i+1;
                 // 添加标签
                 city.appendChild(option);
    
             }
    
         }
    </script>
    
    </body>
    </html>
    
    HTML

    7、跑马灯与Tab切换

    代码示例

    <!DOCTYPE html>
    <html lang="en">
    <head>
      <meta charset="UTF-8">
      <title>tab</title>
      <style>
        *{margin:0; padding:0; list-style:none;}
        body{
            font-family: "Helvetica Neue", "Hiragino Sans GB", "Microsoft YaHei", "9ED14F53", Arial, sans-serif;
        }
        h3{
            text-align: center;
            color:darkcyan;
            margin-top: 30px;
            letter-spacing: 5px;
        }
        .box{
           1000px;
          margin:50px auto 0px;
        }
        #title{
          line-height: 40px;
          background-color: rgb(247,247,247);
          font-size: 16px;
          font-weight: bold;
          color: rgb(102,102,102);
        }
        #title span{
          float: left;
           166px;
          text-align: center;
        }
        #title span:hover{
          /*color: black;*/
          cursor: pointer;
        }
        #content{
          margin-top: 20px;
        }
        #content li{
           1050px;
          display: none;
          background-color: rgb(247,247,247);
        }
        #content li div{
           156px;
          margin-right: 14px;
          float: left;
          text-align: center;
        }
        #content li div a{
          font-size: 14px;
          color: black;
          line-height: 14px;
        /*  float: left;*/
        display: inline-block;
          margin-top: 10px;
        }
        #content li a:hover{
          color: #B70606;
        }
        #content li div span{
            font-size: 16px;
            line-height: 16px;
            /*float: left;*/
            display: block;
            color: rgb(102,102,102);
            margin-top: 10px;
          }
        #content img{
          float: left;
           155px;
          height: 250px;
        }
        #title .select{
          background-color: #2459a2;
          color: white;
            border-radius: 10%;
        }
        #content .show{
          display: block;
        }
    
        .show span{
            color: red!important;
            font-size: 30px;
        }
      </style>
    </head>
    
    <body>
        <h3 id="wel">京东商城欢迎您</h3>
        <!--  direction="right up down left" -->
    <!--  behavior:滚动方式(包括3个值:scroll、slide、alternate) -->
    <!--  说明:scroll:循环滚动,默认效果;slide:只滚动一次就停止;alternate:来回交替进行滚动。 -->
    <!--  scrollamount="5" 滚动速度 -->
    
    <marquee behavior="scroll" direction="right">欢迎您苑昊先生</marquee>
        <script>
    
        function test(){
    
            var mywel = document.getElementById("wel");
            var content = mywel.innerText;
    
            var f_content = content.charAt(0);
            var l_content = content.substring(1,content.length);
    
            var new_content = l_content + f_content;
            mywel.innerText = new_content;
    
        }
    
        // setInterval("test();", 500);
    </script>
        <div class="box">
          <p id="title">
            <span class="select">家用电器</span>
            <span>家具</span>
            <span>汽车</span>
            <span>食品</span>
            <span>女鞋</span>
            <span>医疗保健</span>
          </p>
    
          <ul id="content">
            <li class="show">
    
              <div><img src="https://img10.360buyimg.com/n1/s450x450_jfs/t4786/325/2470647304/119102/9e1a4ed5/59005841Nd786a8df.jpg" alt="冰箱"><a href="#">容声(Ronshen)冰箱</a><span>价格:5600</span></div>
              <div><img src="https://img12.360buyimg.com/n1/s450x450_jfs/t3037/347/1290968859/201366/7c1028a0/57c00194N9d0a54c6.jpg" alt="洗衣机"><a href="#">海尔洗衣机</a><span>价格:5400</span></div>
              <div><img src="https://img11.360buyimg.com/n1/jfs/t3289/128/2393835119/236360/af1d283b/57e0f300N53dde603.jpg" alt="电饭煲"><a href="#">福库(CUCKOO)电饭煲</a><span>价格:3999</span></div>
              <div><img src="https://img13.360buyimg.com/n1/jfs/t3235/137/2361713777/152258/a6908440/57e098c2N44a90a5d.jpg" alt="智能电视"><a href="#">三星智能电视</a><span>价格:8999</span></div>
              <div><img src="https://img10.360buyimg.com/n1/jfs/t2053/101/1391591157/215066/572e131b/5696ee9bN2376492d.jpg" alt="净水器"><a href="#">净水器</a><span>价格:1300</span></div>
              <div><img src="https://img14.360buyimg.com/n1/jfs/t3175/78/2357430273/262835/9a8e7f65/57e0a3e9Nbda39dd2.jpg" alt="空气净化器"><a href="#">空气净化器</a><span>价格:5300</span></div>
            </li>
    
            <li>
    
              <div><img src="https://img12.360buyimg.com/n1/jfs/t1948/172/2877517581/556924/682eb107/56f63dc8Naddf77e5.jpg" alt="沙发"><a href="#">沙发</a><span>价格:2900</span></div>
              <div><img src="https://img12.360buyimg.com/n1/jfs/t1948/172/2877517581/556924/682eb107/56f63dc8Naddf77e5.jpg" alt="沙发"><a href="#">沙发</a><span>价格:2900</span></div>
              <div><img src="https://img12.360buyimg.com/n1/jfs/t1948/172/2877517581/556924/682eb107/56f63dc8Naddf77e5.jpg" alt="沙发"><a href="#">沙发</a><span>价格:2900</span></div>
              <div><img src="https://img12.360buyimg.com/n1/jfs/t1948/172/2877517581/556924/682eb107/56f63dc8Naddf77e5.jpg" alt="沙发"><a href="#">沙发</a><span>价格:2900</span></div>
              <div><img src="https://img12.360buyimg.com/n1/jfs/t1948/172/2877517581/556924/682eb107/56f63dc8Naddf77e5.jpg" alt="沙发"><a href="#">沙发</a><span>价格:2900</span></div>
              <div><img src="https://img12.360buyimg.com/n1/jfs/t1948/172/2877517581/556924/682eb107/56f63dc8Naddf77e5.jpg" alt="沙发"><a href="#">沙发</a><span>价格:2900</span></div>
    
            </li>
            <li>
              <div><img src="http://img11.360buyimg.com/n1/jfs/t4969/76/45396935/144539/347153d4/58d9cff4N36872ad6.jpg" alt="长安汽车"><a href="#">长安汽车</a><span>价格:12900</span></div>
              <div><img src="http://img11.360buyimg.com/n1/jfs/t4969/76/45396935/144539/347153d4/58d9cff4N36872ad6.jpg" alt="长安汽车"><a href="#">长安汽车</a><span>价格:12900</span></div>
              <div><img src="http://img11.360buyimg.com/n1/jfs/t4969/76/45396935/144539/347153d4/58d9cff4N36872ad6.jpg" alt="长安汽车"><a href="#">长安汽车</a><span>价格:12900</span></div>
              <div><img src="http://img11.360buyimg.com/n1/jfs/t4969/76/45396935/144539/347153d4/58d9cff4N36872ad6.jpg" alt="长安汽车"><a href="#">长安汽车</a><span>价格:12900</span></div>
              <div><img src="http://img11.360buyimg.com/n1/jfs/t4969/76/45396935/144539/347153d4/58d9cff4N36872ad6.jpg" alt="长安汽车"><a href="#">长安汽车</a><span>价格:12900</span></div>
              <div><img src="http://img11.360buyimg.com/n1/jfs/t4969/76/45396935/144539/347153d4/58d9cff4N36872ad6.jpg" alt="长安汽车"><a href="#">长安汽车</a><span>价格:12900</span></div>
            </li>
            <li>
    
              <div><img src="https://img14.360buyimg.com/n1/jfs/t4414/110/2582917360/207971/b7e129ad/58f0ee1fN94425de1.jpg" alt="嘉兴粽子"><a href="#">嘉兴粽子</a><span>价格:1</span></div>
              <div><img src="https://img14.360buyimg.com/n1/jfs/t4414/110/2582917360/207971/b7e129ad/58f0ee1fN94425de1.jpg" alt="嘉兴粽子"><a href="#">嘉兴粽子</a><span>价格:1</span></div>
              <div><img src="https://img14.360buyimg.com/n1/jfs/t4414/110/2582917360/207971/b7e129ad/58f0ee1fN94425de1.jpg" alt="嘉兴粽子"><a href="#">嘉兴粽子</a><span>价格:1</span></div>
              <div><img src="https://img14.360buyimg.com/n1/jfs/t4414/110/2582917360/207971/b7e129ad/58f0ee1fN94425de1.jpg" alt="嘉兴粽子"><a href="#">嘉兴粽子</a><span>价格:1</span></div>
              <div><img src="https://img14.360buyimg.com/n1/jfs/t4414/110/2582917360/207971/b7e129ad/58f0ee1fN94425de1.jpg" alt="嘉兴粽子"><a href="#">嘉兴粽子</a><span>价格:1</span></div>
              <div><img src="https://img14.360buyimg.com/n1/jfs/t4414/110/2582917360/207971/b7e129ad/58f0ee1fN94425de1.jpg" alt="嘉兴粽子"><a href="#">嘉兴粽子</a><span>价格:1</span></div>
    
            </li>
            <li>
    
              <div><img src="https://img14.360buyimg.com/n1/jfs/t3079/298/5759209435/92674/14818594/587f1c33N53e5d2a9.jpg" alt="星期六"><a href="#">星期六</a><span>价格:439</span></div>
              <div><img src="https://img14.360buyimg.com/n1/jfs/t3079/298/5759209435/92674/14818594/587f1c33N53e5d2a9.jpg" alt="星期六"><a href="#">星期六</a><span>价格:439</span></div>
              <div><img src="https://img14.360buyimg.com/n1/jfs/t3079/298/5759209435/92674/14818594/587f1c33N53e5d2a9.jpg" alt="星期六"><a href="#">星期六</a><span>价格:439</span></div>
              <div><img src="https://img14.360buyimg.com/n1/jfs/t3079/298/5759209435/92674/14818594/587f1c33N53e5d2a9.jpg" alt="星期六"><a href="#">星期六</a><span>价格:439</span></div>
              <div><img src="https://img14.360buyimg.com/n1/jfs/t3079/298/5759209435/92674/14818594/587f1c33N53e5d2a9.jpg" alt="星期六"><a href="#">星期六</a><span>价格:439</span></div>
              <div><img src="https://img14.360buyimg.com/n1/jfs/t3079/298/5759209435/92674/14818594/587f1c33N53e5d2a9.jpg" alt="星期六"><a href="#">星期六</a><span>价格:439</span></div>
    
            </li>
            <li>
    
              <div><img src="https://img12.360buyimg.com/n1/jfs/t5755/127/1139389729/356866/99d4e869/5923e410Nb2983f70.jpg" alt="汇仁 肾宝片"><a href="#">汇仁 肾宝片</a><span>价格:322</span></div>
              <div><img src="https://img12.360buyimg.com/n1/jfs/t5755/127/1139389729/356866/99d4e869/5923e410Nb2983f70.jpg" alt="汇仁 肾宝片"><a href="#">汇仁 肾宝片</a><span>价格:322</span></div>
              <div><img src="https://img12.360buyimg.com/n1/jfs/t5755/127/1139389729/356866/99d4e869/5923e410Nb2983f70.jpg" alt="汇仁 肾宝片"><a href="#">汇仁 肾宝片</a><span>价格:322</span></div>
              <div><img src="https://img12.360buyimg.com/n1/jfs/t5755/127/1139389729/356866/99d4e869/5923e410Nb2983f70.jpg" alt="汇仁 肾宝片"><a href="#">汇仁 肾宝片</a><span>价格:322</span></div>
              <div><img src="https://img12.360buyimg.com/n1/jfs/t5755/127/1139389729/356866/99d4e869/5923e410Nb2983f70.jpg" alt="汇仁 肾宝片"><a href="#">汇仁 肾宝片</a><span>价格:322</span></div>
              <div><img src="https://img12.360buyimg.com/n1/jfs/t5755/127/1139389729/356866/99d4e869/5923e410Nb2983f70.jpg" alt="汇仁 肾宝片"><a href="#">汇仁 肾宝片</a><span>价格:322</span></div>
    
            </li>
    
    
          </ul>
        </div>
    
        <script>
          var title=document.getElementById('title');
          var content=document.getElementById('content');
          var category=title.getElementsByTagName('span');
          var item=content.getElementsByTagName('li');
    
          for (var i = 0; i < category.length; i++) {
    
              category[i].index=i;
    
              category[i].onclick=function(){
    
                for (var j = 0; j < category.length; j++) {
                  category[j].className='';
                  item[j].className='';
                }
                this.className='select';
                item[this.index].className='show';
              }
    
    
          }
    
        </script>
    </body>
    </html>
    
    HTML

    四、js扩展

    1、js的作用域

    作用域是JavaScript最重要的概念之一,
    想要学好JavaScript就需要理解JavaScript作用域和作用域链的工作原理。
    
    任何程序设计语言都有作用域的概念,简单的说,
    作用域就是变量与函数的可访问范围,即作用域控制着变量与函数的可见性和生命周期。
    
    在JavaScript中,变量的作用域有全局作用域和局部作用域两种。
    

    2、全局作用域(Global Scope)

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

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

    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
    
    Js

    fe2:所有未定义直接赋值的变量自动声明为拥有全局作用域:

    var name="yuan";
    
    function foo(){
        age=23;  // 这里的age未定义,所以是全局变量
    
        var sex="male"
    }
    foo();
    console.log(age);   //  23
    console.log(sex);   // sex is not defined
    
    Js

    3、局部作用域(Local Scope)

    和全局作用域相反,局部作用域一般只在固定的代码片段内可访问到,
    最常见的例如函数内部,所有在一些地方也会看到有人把这种作用域成为函数作用域.
    
    如示例1中的age与inner都只有局部作用域。(js中if、for没有自己的作用域)
    

    4、作用域链(Scope Chain)

    在JavaScript中,函数也是对象,实际上,JavaScript里一切都是对象。
    函数对象和其它对象一样,拥有可以通过代码访问的属性和一系列仅供JavaScript引擎访问的内部属性。
    
    其中一个内部属性是[[Scope]],由ECMA-262标准第三版定义,
    该内部属性包含了函数被创建的作用域中对象的集合,这个集合被称为函数的作用域链,
    它决定了哪些数据能被函数访问。
  • 相关阅读:
    python常用包收集
    python pep 8
    常用python字符串处理
    安全资源整理
    WordPress下载安装简单配置实例
    PHP框架学习之Laravel基本功能
    PHP框架学习之Laravel安装
    PHP面试题之优化
    PHP面试题之小杂鱼
    PHP面试题之文件目录操作
  • 原文地址:https://www.cnblogs.com/yipianshuying/p/10175211.html
Copyright © 2011-2022 走看看