zoukankan      html  css  js  c++  java
  • JavaScript的进阶篇

    一、Array对象。数组对象

    1)创建数组对象

    //Array 对象用于在单个的变量中存储多个值。
    //语法:
    
    //创建方式1:
    var a=[1,2,3];
    
    //创建方式2:
    new Array();     //  创建数组时允许指定元素个数也可以不指定元素个数。
    new Array(size);//if 1个参数且为数字,即代表size,not content
    //    初始化数组对象:
        var cnweek=new Array(7);
            cnweek[0]="星期日";
            cnweek[1]="星期一";
    //        ...
            cnweek[6]="星期六";
    
    new Array(element0, element1, ..., elementn)//也可以直接在建立对象时初始化数组元素,元素类型允许不同
    
    var test=new Array(100,"a",true);
    创建数组的方式

     归纳创建数组

    var arr=[1,6,3,8];
    var arr2=new Array(1,2,3,9);
    var arr3=new Array(5,"hello",true,[1,3]);
    console.log(arr.length);    //4
    console.log(arr2.length);   //4
    console.log(arr3.length);   //4
    console.log(arr3[3])    // [1,3]
    
    // 如果采用初始化对象方式创建数组,如果里面只有一个值而已是一个数字,那么数字表示的是长度
    //而不是内容
    var arr4=new Array(3);
    console.log(arr4[0]);
    console.log(arr4[1]);   // undefined
    创建数组

    2)创建二维数组

    var cnweek=new Array(7);
    for (var i=0;i<=6;i++){
        cnweek[i]=new Array(2);
    }
    cnweek[0][0]="星期日";
    cnweek[0][1]="Sunday";
    cnweek[1][0]="星期一";
    cnweek[1][1]="Monday";
    ...
    cnweek[6][0]="星期六";
    cnweek[6][1]="Saturday";
    
    // 案例二
    var arr2=new Array(5,"hello",true,[1,3]);
    alert(arr2[3][1]);
    //数组对象的方法 join方法:将数组内的字符串拼接成一个字符串,join方法的对象不同于py,在js是Array
    var ret=["hello","zhangsan"].join("+++++")
    alert(ret)
    二维数组

    3)Array的对象的属性

          获取数组元素的个数:length

    var cnweek=new Array(7);
    cnweek[0]="星期日";
    cnweek[1]="星期一";
    cnweek[2]="星期二";
    cnweek[3]="星期三";
    cnweek[4]="星期四";
    cnweek[5]="星期五";
    cnweek[6]="星期六";
    for (var i=0;i<cnweek.length;i++){
      document.write(cnweek[i]+" | ");
    }
    
    //页面结果 ====》星期日 | 星期一 | 星期二 | 星期三 | 星期四 | 星期五 | 星期六 |
    Array属性

    4)Array对象的方法

    4.1) 连接数组-join方法

    //书写格式
    //x.join(bystr)
    //使用注解
    
    //x代表数组对象
    //bystr作为连接数组中元素的字符串
    //返回连接后的字符串
    //与字符串的split功能刚好相反
        
    var arr1=[1, 2, 3, 4, 5, 6, 7];
    var str1=arr1.join("-");
    alert(str1);
    //结果为"1-2-3-4-5-6-7" 
    join方法

    4.2)连接数组-concat方法

    //连接数组-concat方法
    //x.concat(value,...)
    
    var a = [1,2,3];
    var a = new Array(1,2,3);
    var b=a.concat(4,5) ;
    
    alert(a.toString());
    //返回结果为1,2,3
    alert(b.toString());
    //返回结果为1,2,3,4,5
    concat方法

    4.3)队列和栈的增删元素的进出顺序

    // 队列:先进先出  栈:先进后出==》添加元素类似追加,删除元素,删除第一个元素
    var arr5=[1,4,7];
    arr5.push(13)             // 追加至末尾
    console.log(arr5);        // [1,4,7,13]
    arr5.push("hello",7);
    console.log(arr5);        // [1,4,7,13,"hello",7]
    var ret=arr5.pop();       // 7 ===》pop,删除元素,表示删除最后一个元素
    alert(ret)                // 7 打印删除的最后元素
    pull和pop
    var arr5=[1,4,7];
    arr5.unshift(45)    // 追加元素在开头
    console.log(arr5)   [45,1,4,7]
    arr5.shift();           // 删除第一个元素
    console.log(arr5)   [1,4,7]
    unshift和shift

    4.4) 数组排序-reverse sort

    var arr6=[1,5,3,2];
    arr6.reverse();     // 反转 [2, 3, 5, 1]
    console.log(arr6)
    console.log(arr6.sort())    // 顺序排队 [1, 2, 3, 5]
    // 排序规则,首字母对比
    var arr7=[1,5,3,2,100];
    arr7.reverse();     // 反转 [100, 2, 3, 5, 1]
    console.log(arr7)
    console.log(arr7.sort())    // 首字母顺序排队 [1, 100, 2, 3, 5]
    reverse方法

        正常排序规则,low版本

    var arr6=[1,6,3,2,100];
    console.log(arr6.sort(mysort));    // [1, 2, 3, 6, 100]
    function mysort(a,b) {
        if (a>b) {
            return 1;
        }else if (a<b) {
            return -1
        }else {
            return 0
     
    low版排序

        正常排序规则,升级版

    var arr6=[1,6,3,2,100];
    console.log(arr6.sort(mysort));    // [1, 2, 3, 6, 100]
    function mysort(a,b) {
        return a-b;
    }
    console.log(arr6.concat(4,5));      // concat 追加在末尾[1, 2, 3, 6, 100, 4, 5]
    升级版排序

     5)数组切面-slice

    //start表示开始位置索引
    //end是结束位置下一数组元素索引编号
    //第一个数组元素索引为0
    //start、end可为负数,-1代表最后一个数组元素
    //end省略则相当于从start位置截取以后所有数组元素
    
    var arr1=['a','b','c','d','e','f','g','h'];
    var arr2=arr1.slice(2,4);
    var arr3=arr1.slice(4);
    var arr4=arr1.slice(2,-1);
    
    alert(arr2.toString());
    //结果为"c,d"
    alert(arr3.toString());
    //结果为"e,f,g,h"
    alert(arr4.toString());
    //结果为"c,d,e,f,g"
    slice切片

    6)删除子数组

    //x. splice(start, deleteCount, value, ...)
    //x代表数组对象
    //splice的主要用途是对数组指定位置进行删除和插入
    //start表示开始位置索引
    //deleteCount删除数组元素的个数
    //value表示在删除位置插入的数组元素
    //value参数可以省略
    
    var a = [1,2,3,4,5,6,7,8];
    a.splice(1,2);
    //a变为 [1,4,5,6,7,8]
    alert(a.toString());
    a.splice(1,1);
     //a变为[1,5,6,7,8]
    alert(a.toString());
    a.splice(1,0,2,3);
     //a变为[1,2,3,5,6,7,8]
    alert(a.toString());
    splice指定位置进行删除和插入

    7)归纳js的数组特性

    js中数组的特性
        js数组的特性,  规定是什么类型的数组,就只能装什么类型.只有一种类型.
        js中的数组特性1: js中的数组可以装任意类型,没有任何限制.
        js中的数组特性2: js中的数组,长度是随着下标变化的.用到多长就有多长.
    var arr5 = ['abc',123,1.14,true,null,undefined,new String('1213'),new Function('a','b','alert(a+b)')];
    /*  alert(arr5.length);    //8
    arr5[10] = "hahaha";
    alert(arr5.length);     //11
    alert(arr5[9]);            // undefined 
    数组的特性小结

     二、Windows对象

    1)location 对象:window.location 对象用于获得当前页面的地址 (URL),并把浏览器重定向到新的页面

    location.href  获取URL
    location.href="URL" // 跳转到指定页面
    location.reload() 重新加载页面
    常用属性和方法

    2)弹出框:可以在 JavaScript 中创建三种消息框:警告框、确认框、提示框

    警告框
        警告框经常用于确保用户可以得到某些信息。
        当警告框出现后,用户需要点击确定按钮才能继续进行操作。
        语法:alert("你看到了吗?");
        
    确认框(了解即可)
        确认框用于使用户可以验证或者接受某些信息。
        当确认框出现后,用户需要点击确定或者取消按钮才能继续进行操作。
        如果用户点击确认,那么返回值为 true。如果用户点击取消,那么返回值为 false
        语法:confirm("你确定吗?");
        
    提示框(了解即可)
        提示框经常用于提示用户在进入页面前输入某个值。
        当提示框出现后,用户需要输入某个值,然后点击确认或取消按钮才能继续操纵。
        如果用户点击确认,那么返回值为输入的值。如果用户点击取消,那么返回值为 null。
        语法:prompt("请在下方输入","你的答案")
    意义和语法

     3)history对象

    history.back()         加载 history 列表中的前一个 URL。
    history.forward()      加载 history 列表中的下一个 URL。
    history.go()           加载 history 列表中的某个具体页面。
    url的history方法
    <a href="rrr.html">click</a>
    <button onclick=" history.forward()">>>></button>
    <button onclick="history.back()">back</button>
    <button onclick="history.go()">back</button>
    示例

    4)setTimeout(计时相关)

    setTimeout() 方法会返回某个值。在上面的语句中,值被储存在名为 t 的变量中。假如你希望取消这个 setTimeout(),你可以使用这个变量名来指定它。
    setTimeout() 的第一个参数是含有 JavaScript 语句的字符串。这个语句可能诸如 "alert('5 seconds!')",或者对函数的调用,诸如 alertMsg()"。
    第二个参数指示从当前起多少毫秒后执行第一个参数(1000 毫秒等于一秒)。
    语法 var t=setTimeout("JS语句",毫秒)    // 设置在多少秒后执行
    clearTimeout(setTimeout_variable)        // 取消执行
    
    setInterval()
    setInterval() 方法可按照指定的周期(以毫秒计)来调用函数或计算表达式。
    setInterval() 方法会不停地调用函数,直到 clearInterval() 被调用或窗口被关闭。由 setInterval() 返回的 ID 值可用作 clearInterval() 方法的参数。
    语法:setInterval("JS语句",时间间隔)
    
    clearInterval()
    clearInterval() 方法可取消由 setInterval() 设置的 timeout。
    clearInterval() 方法的参数必须是由 setInterval() 返回的 ID 值。
    语法:clearInterval(setinterval返回的ID值)
    setTimeout和clearTimeout和setInterval和clearInterval

    4.1)清除计时器示例

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>清除定时器示例</title>
        <script src="04.js"></script>
    </head>
    <body>
    
    </body>
    </html>
    settime.html
    function f1() {
        alert(123);
    }
    
    function clear() {
        var t = setInterval(f1, 3000);
        function inner() {
            clearInterval(t);
        }
        setTimeout(inner, 9000)
    }
    
    clear();
    settime.js

    5)navigator对象(了解即可):通过这个对象可以判定用户所使用的浏览器,包含了浏览器相关信息。

    navigator.appName   // Web浏览器全称
    navigator.appVersion  // Web浏览器厂商和版本的详细字符串
    navigator.userAgent  // 客户端绝大部分信息
    navigator.platform   // 浏览器运行所在的操作系统
    navigator

    6)screen对象(了解即可):屏幕对象,不常用。

    screen.availWidth - 可用的屏幕宽度
    screen.availHeight - 可用的屏幕高度
    screen

    五、DOM对象,及document对象

    DOM对象是什么?简单的来说,就是操作html标签的对象。

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

    1)DOM节点

    整个文档是一个文档节点(document对象)
    每个 HTML 元素是元素节点(element 对象)
    HTML 元素内的文本是文本节点(text对象)
    每个 HTML 属性是属性节点(attribute对象)
    注释是注释节点(comment对象)
    

    2)节点属性

    节点(自身)属性:
        attributes - 节点(元素)的属性节点
        nodeType – 节点类型
        nodeValue – 节点值
        nodeName – 节点名称
        innerHTML - 节点(元素)的文本值
    
    导航属性:
        parentNode - 节点(元素)的父节点 (推荐)
        firstChild – 节点下第一个子元素
        lastChild – 节点下最后一个子元素
        childNodes - 节点(元素)的子节点

    推荐导航属性
      parentElement // 父节点标签元素   children // 所有子标签   firstElementChild // 第一个子标签元素   lastElementChild // 最后一个子标签元素   nextElementtSibling  // 下一个兄弟标签元素   previousElementSibling   // 上一个兄弟标签元素

    3)节点树的层级关系

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

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

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

    3)直接查找:访问 HTML 元素(节点),访问 HTML 元素等同于访问节点,我们能够以不同的方式来访问 HTML 元素:

    getElementById()          根据ID获取一个标签
    getElementsByTagName()    根据标签名获取标签合集 
    getElementsByClassName()  根据class属性获取
    getElementsByName()      根据属性name来获取表情
    <div id="div1">
        <div class="div2">i am div2</div>
        <div name="yuan">i am div2</div>
        <div id="div3">i am div2</div>
        <p>hello p</p>
    </div>
    
    <script>
       var div1=document.getElementById("div1");
    ////支持;
    //   var ele= div1.getElementsByTagName("p");
    //   alert(ele.length);
    ////支持
    //   var ele2=div1.getElementsByClassName("div2");
    //   alert(ele2.length);
    ////不支持
    //   var ele3=div1.getElementById("div3");
    //   alert(ele3.length);
    ////不支持
    //   var ele4=div1.getElementsByName("yuan");
    //   alert(ele4.length)
    </script>
    示例

    4)间接查找标签

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

    5)添加节点,删除节点,替换节点

    createElement(标签名)
    var divEle = document.createElement("div");
    添加节点
        追加一个子节点(作为最后的子节点)
            somenode.appendChild(newnode);
        增加的节点放到某个节点的前边。
            somenode.insertBefore(newnode,某个节点);
    删除节点
        removeChild(要删除的节点)
    替换节点
        somenode.replaceChild(newnode, 某个节点);
    var imgEle=document.createElement("img");
    imgEle.setAttribute("src", "http://image11.m1905.cn/uploadfile/s2010/0205/20100205083613178.jpg");
    var d1Ele = document.getElementById("d1");
    d1Ele.appendChild(imgEle);
    createElement示例

    5.1)节点的增删改查详细版

    增:
        createElement(name)创建元素
        appendChild();将元素添加
     
    删:
        获得要删除的元素
        获得它的父元素
        使用removeChild()方法删除
     
    改:
        第一种方式:
            使用上面增和删结合完成修改
        第二中方式:
            使用setAttribute();方法修改属性         
            使用innerHTML属性修改元素的内容
    查
        即使用document的属性方法
    增删改查
    <script type="text/javascript">
    //在第一个div中动态增加一个a标签. 该a标签点击之后跳转到百度首页.
        function addNode(){
            //1.获得 第一个div
            var div = document.getElementById("div_1");
            //2.创建a标签  createElement==>创建一个a标签   <a></a>
            var eleA =  document.createElement("a");
            //3.为a标签添加属性 <a href="http://www.baidu.com"></a>
            eleA.setAttribute("href", "http://www.baidu.com");
            //4.为a标签添加内容 <a href="http://www.baidu.com">百度</a>
            eleA.innerHTML = "百度";    
            //5.将a标签添加到div中
            div.appendChild(eleA);
        }
        //点击后 删除div区域2
        function deleteNode(){
            //1 获得要删除的div区域
                var div = document.getElementById("div_2");
            //2.获得父亲
                var parent = div.parentNode;
            //3 由父亲操刀 
                parent.removeChild(div);
        }
        //点击后 替换div区域3 为一个美女
        function updateNode(){
            //1 获得要替换的div区域3
            var div = document.getElementById("div_3");
            //2创建img标签对象 <img />
            var img = document.createElement("img");
            //3添加属性 <img src="001.jpg" />
            img.setAttribute("src", "001.JPG");
            //4.获得父节点
            var parent = div.parentNode;
            //5.替换
            parent.replaceChild(img, div);
        }
        //点击后 将div区域4 克隆一份 添加到页面底部
        
        function copyNode(){
            //1.获取要克隆的div
            var div = document.getElementById("div_4");
            //2.克隆 参数为true 那么克隆时克隆所有子元素. false 只克隆自己
            var div_copy = div.cloneNode(true);
            //3.获得父亲
            var parent = div.parentNode;
            //4.添加
            parent.appendChild(div_copy);
        }
       
    </script>
    示例

    6)属性节点

    获取文本节点的值:
    var divEle = document.getElementById("d1")
    divEle.innerText
    divEle.innerHTML
    
    设置文本节点的值
    var divEle = document.getElementById("d1")
    divEle.innerText="1"
    divEle.innerHTML="<p>2</p>"
    innerText和innerHTML

    7) 获取值操作。elementNode.value 适用于的标签input、select、textarea 

    var iEle = document.getElementById("i1");
    console.log(iEle.value);
    var sEle = document.getElementById("s1");
    console.log(sEle.value);
    var tEle = document.getElementById("t1");
    console.log(tEle.value);
    示例

    8)js操作class属性。如:obj.style.backgroundColor="red"

    8.1)对于没有中横线的CSS属性一般直接使用style.属性名即可。如:

    obj.style.margin
    obj.style.width
    obj.style.left
    obj.style.position
    示例

    8.2)对含有中横线的CSS属性,将中横线后面的第一个字母换成大写即可。如:

    obj.style.marginTop
    obj.style.borderLeftWidth
    obj.style.zIndex
    obj.style.fontFamily
    示例

    六、事件模型

    1)触发事件概况

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

    2)触发事件的2种写法,行内写和script属性内写

    <div onclick="alert(123)">点我呀</div>
    <p id="abc">试一试!</p>
    
    <script>
        var ele=document.getElementById("abc");
        ele.onclick=function(){
            alert("hi");
        };
    </script>
    onclick事件

    3)注意:this。console.log下必须写this

    <div id="abc" onclick="func1(this)">事件绑定方式1</div>
    <div id="id123">事件绑定方式2</div>
    <script>
        function func1(self){
            console.log(self.id)
        }
    
        //jquery下是$(self), 这种方式this参数必须填写;
    //==============================================
        var ele=document.getElementById("id123").onclick=function(){
             console.log(this.id);
            //jquery下是$(this), 这种方式不需要this参数;
        }
    </script>
    console.log(this.id)注意点

    4)onsubmit:(提交表单)

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

    <form id="form">
                <input type="text"/>
                <input type="submit" value="点我!" />
    </form>
    
    <script type="text/javascript">
    //阻止表单提交方式1().
    //onsubmit 命名的事件函数,可以接受返回值. 其中返回false表示拦截表单提交.其他为放行.
    
    var ele=document.getElementById("form");
    ele.onsubmit=function(event) {
    //                alert("验证失败 表单不会提交!");
    //                return false;
    
    // 阻止表单提交方式2 event.preventDefault(); ==>通知浏览器不要执行与事件关联的默认动作。
     alert("验证失败 表单不会提交!");
     event.preventDefault();
    }
    </script>
    onsubmit示例

    5)Event对象

    Event 对象代表事件的状态,比如事件在其中发生的元素、键盘按键的状态、鼠标的位置、鼠标按钮的状态。

    事件通常与函数结合使用,函数不会在事件发生前被执行!event对象在事件发生时系统已经创建好了,并且会在事件函数被调用时传给事件函数.我们获得仅仅需要接收一下即可.

    比如onkeydown,我们想知道哪个键被按下了,需要问下event对象的属性,这里就时KeyCode;

    <div id="abc_1" style="border:1px solid red;300px;height:300px;">
            <div id="abc_2" style="border:1px solid red;200px;height:200px;"></div>
    </div>
    <script type="text/javascript">
        document.getElementById("abc_1").onclick=function(){
            alert('111');
        }
        document.getElementById("abc_2").onclick=function(event){
            alert('222');
            event.stopPropagation(); //阻止事件向外层div传播.
        }
    </script>
    事件传播示例

    6)修理HTML DOM

    改变HTML内容

      改变元素内容的最简单的方法是使用innerHTM,innerText

    改变CSS样式

    改变 HTML 属性 
            elementNode.setAttribute(name,value)
            elementNode.getAttribute(name)<-------------->elementNode.value(DHTML)
    
    创建新的 HTML 元素 
            createElement(name)
    
    删除已有的 HTML 元素 
            elementNode.removeChild(node)
    
    关于class的操作 
            elementNode.className
            elementNode.classList.add
            elementNode.classList.remove
    

    七、实例练习

    练习一,模拟静态对话框

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <style>
            #div1{
                position: fixed;
                 100%;
                top:0;
                left: 0;
                height: 2000px;
                background-color: #b4b4b4;
            }
            #div2{
                position: fixed;
                 100%;
                z-index: 1001;
                top: 0;
                left: 0;
                right: 0;
                bottom: 0;
                background-color: red;
                opacity: 0.3;
            }
            #div3{
                height: 300px;
                 400px;
                background-color: blueviolet;
                position: absolute;
                top: 50%;
                left: 50%;
                z-index: 1002;
                margin-left: -200px;
                margin-top: -150px;
            }
            .hide{
                display: none;
            }
        </style>
    </head>
    <body>
    <div id="div1">
        <input type="button" value="click" onclick="show()">
    </div>
    <div id="div2" class="div hide"></div>
    <div id="div3" class="div hide">
        <input type="button" value="cancel" onclick="cancel()">
    </div>
    
    <script>
        function show() {
            var ele=document.getElementsByClassName("div")
            for (var i=0;i<ele.length;i++){
                ele[i].classList.remove("hide")
            }
        }
        function cancel() {
            var ele=document.getElementsByClassName("div")
            for (var i=0;i<ele.length;i++){
                ele[i].classList.add("hide")
            }
        }
    </script>
    </body>
    </html>
    View Code

    练习二,全选反选取消

     <button onclick="select('all');">全选</button>
         <button onclick="select('cancel');">取消</button>
         <button onclick="select('reverse');">反选</button>
    
         <table border="1" id="Table">
             <tr>
                 <td><input type="checkbox"></td>
                 <td>111</td>
             </tr>
             <tr>
                 <td><input type="checkbox"></td>
                 <td>222</td>
             </tr>
             <tr>
                 <td><input type="checkbox"></td>
                 <td>333</td>
             </tr>
             <tr>
                 <td><input type="checkbox"></td>
                 <td>444</td>
             </tr>
         </table>
    
    
    <script>
        function select(choice){
            var ele=document.getElementById("Table");
    
            var inputs=ele.getElementsByTagName("input");
            for (var i=0;i<inputs.length;i=i+1){
                       var ele2=inputs[i];
                
                if (choice=="all"){
                    ele2.checked=true;
                }else if(choice=="cancel"){
                    ele2.checked=false;
                }
                else {
                    if (ele2.checked){
                        ele2.checked=false;
                    }else {
                        ele2.checked=true;
                    }
                }
            }
        }
    </script>
    View Code

    练习三,两级关联选择菜单

    <select id="province">
        <option>请选择省:</option>
    </select>
    
    <select id="city">
        <option>请选择市:</option>
    </select>
    
    <script>
        data={"河北省":["廊坊","邯郸"],"北京":["朝阳区","海淀区"]};
        var p=document.getElementById("province");
        var c=document.getElementById("city");
    
        for(var i in data){
            var option_pro=document.createElement("option");
            option_pro.innerHTML=i;
            p.appendChild(option_pro);
        }
    
        p.onchange=function(){
            pro=(this.options[this.selectedIndex]).innerHTML;
            citys=data[pro];
            c.options.length=0;
    
            for (var i in citys){
                var option_city=document.createElement("option");
                option_city.innerHTML=citys[i];
                c.appendChild(option_city);
            }
        }
    </script>
    View Code
  • 相关阅读:
    4-9 内置函数和匿名函数的题
    4-09 试题
    4--2日 函数 装饰器 作业题
    if 语句
    4-4日 内置函数,匿名函数
    4-4日 列表推导式,生成器推导式
    4-3日 迭代器 生成器
    4-2日装饰器,带参数的装饰器
    python 函数名 、闭包 装饰器 day13
    [LeetCode]-DataBase-Department Top Three Salaries
  • 原文地址:https://www.cnblogs.com/linu/p/8447168.html
Copyright © 2011-2022 走看看