JavaScript(五)

级联效果

下拉列表框

1.利用省份下拉框的选项改变事件onChange
2.根据用户选择的省份,动态添加城市下拉框的值

下拉列表框SELECT
常用属性
  length:选项的数量
  value:每个选项的value值
  options:所有选项的集合(选项的数组)
  selectedIndex:选中的选项在options中的索引

选项数组
  1、每个选项Option可以动态创建
    new Option("显示内容","值")
  2、动态添加选项
    selCity.options.add(newOption1)
  3、清除选项
    selCity.options.length=0

 

下拉列表框的基本用法实例:

<!DOCTYPE html>
<html>
<head>
    <title></title>
</head>
<body>
<select id="province">
    <option value="js">江苏省</option>
    <option value="sd">山东省</option>
    <option value="zj">浙江省</option>
</select>
</body>
</html>

<script type="text/javascript">
    //获取下拉列表框
    var sel = document.getElementById("province");
    //获取下拉列表框的选项的数量
    console.log(sel.length);
    length属性可读可写(确定数组长度只剩一个,用来从后往前开始删除)
    sel.length = 1;

    //通过options根据索引删除选项(删除指定的元素:索引从0开始)
    sel.options.remove(1);
    //添加新的选项 第一个参数表示选项的文本值,第二个参数表示选项的值(value)
    sel.options.add(new Option("海南省","hn"));

    //绑定选项变更的事件
    sel.onchange = function(){
        //获取选项的值
        alert(this.value);
        //获取选中项的索引 从0开始
        alert(this.selectedIndex);
    }
</script>

数组:

创建方式三种:

第一种:

var  array=new Array();
array[0]=“A”;
array[1]=“B”;
array[2]=“C”;

第二种:

 

var  array=new Array(“A”,”B”,”C”);

 

第三种:

 

var  array=[“A”,”B”,”C”];

 

数组中常用的方法:

  sort  顺序排列

  reverse  反转内容

  join(string)  将数组中的元素使用字符串连接

  concat(array1,array2)  将两个数组并成一个数组(可以拼接任意多个数组)

  slice(start,end)  截取数组(不包括end对应的元素)

  splice(index,count,item)  删除元素并添加新值:

                  第一个参数:替换开始的索引;

                  第二个参数:替换的元素个数;

                  第三个元素:需要插入的元素值;

  push  将元素添加至最后一个元素

  pop  将数组中最后一个元素删除(可以用变量获取该数值)

  

如果要删除指定的元素:可以将数组遍历确定其索引,然后对数组进行 截取 加 拼接

function deleteArray(array,value){
     //查找元素的索引,默认该元素不存在
     var index = -1
     //遍历数组
     for(var i = 0; i < array.length; i++){
         if(array[i] == value){
             //记录索引
             index = i;
             break;
         }
     }
     if(index != -1){
         //截取删除元素的前后部分
         var before = array.slice(0,index);
         var after = array.slice(index+1);
         //拼接数组
         var newArray = before.concat(after);
         return newArray;
     }
     return array;
}

 用splice(index,count)方法实现删除:

function deleteArray(array,value){
     //查找元素的索引,默认该元素不存在
     var index = -1
     //遍历数组
     for(var i = 0; i < array.length; i++){
         if(array[i] == value){
             //记录索引
             index = i;
             break;
         }
     }
     if(index != -1){
        //如果第三个元素不写,就是将这个元素删除,不插入值
         var newArray = splice(index,1);
         return newArray;
     }
    //如果没找到就返回原数组
     return array;
}

数组的常用方法示例:

<!DOCTYPE html>
<html>
<head>
    <title></title>
</head>
<body>

</body>
</html>
<script type="text/javascript">
    var array = new Array("D","A","E","F","C","B");

    //对数组进行排序
    //只能进行升序排列
    array.sort();

    //对数组进行反转
    //先升序排列,再进行反转可以实现降序排列
    array.reverse();
    
    //将数组的每个元素根据指定参数拼接成一个字符串
    var str = array.join("#");
    console.log(str);  //(A#B#C#D#E#F)
    
    //将两个数组合并为一个数组
    var array1 = new Array("A","B","C");
    var array2 = new Array("a","b","c");
    var newArray = array1.concat(array2);
    console.log(newArray);
    
    //根据索引截取数组
        //从索引2的位置一直截取到数组最后一个元素
    array = array.slice(2);
    //从索引2的位置一直截取到索引4为止
    array = array.slice(2,4);
    
    //将元素写入数组的最后
    array.push("X");
    //将最后个元素删除,并返回删除的元素
    var value = array.pop();
    console.log(value);

    //将指定索引的元素替换成新的元素值
    //第一个参数表示替换的起始索引,第二个参数表示替换的元素数量,第三个参数表示替换的新值
    array.splice(1,2,"a");
    
    //如果第三个参数没有填写,则表示根据指定索引位置删除指定的元素的数量
    array.splice(1,2);


    function deleteArray(array,value){
        //查找元素的索引,默认该元素不存在
        var index = -1
        //遍历数组
        for(var i = 0; i < array.length; i++){
            if(array[i] == value){
                //记录索引
                index = i;
                break;
            }
        }
        if(index != -1){
            //截取删除元素的前后部分
            var before = array.slice(0,index);
            var after = array.slice(index+1);
            //拼接数组
            var newArray = before.concat(after);
            return newArray;
        }
        return array;
    }

    array = deleteArray(array,"E");

    console.log(array);
</script>

通过选项1的选中内容自动添加选项2的选项内容(手动添加+数组循环添加)

<!DOCTYPE html>
<html>
<head>
    <title></title>
</head>
<body>
<select id="province">
    <option>--请选择--</option>
    <option >江苏</option>
    <option >山东</option>
    <option >浙江</option>
</select>
<select id="city">
    <option>--请选择--</option>
</select>
</body>
</html>
<script type="text/javascript">
    //获取下拉列表框对象
    var province = document.getElementById("province");
    var city = document.getElementById("city");
    //存储所有城市的数组
    var array = new Array();
    array[0] = new Array("苏州","无锡","南京");
    array[1] = new Array("青岛","济南","烟台");
    array[2] = new Array("杭州","嘉兴","宁波");


    province.onchange = function(){
        //删除之前的城市选项
        city.length = 1;
        //获取选择的省份的索引
        var index = province.selectedIndex;
        //根据省份的索引将对应的城市选项添加至城市下拉列表框
        //手动添加
            // if(index == 1){
        //     var city1 = new Option("苏州","sz");
        //     var city2 = new Option("无锡","wx");
        //     var city3 = new Option("南京","nj");
        //     city.options.add(city1);
        //     city.options.add(city2);
        //     city.options.add(city3);
        // }
        // else if(index == 2){
        //     var city1 = new Option("青岛","qd");
        //     var city2 = new Option("济南","jn");
        //     var city3 = new Option("烟台","yt");
        //     city.options.add(city1);
        //     city.options.add(city2);
        //     city.options.add(city3);
        // }
        // else if(index == 3){
        //     var city1 = new Option("杭州","hz");
        //     var city2 = new Option("嘉兴","jx");
        //     var city3 = new Option("金华","jh");
        //     city.options.add(city1);
        //     city.options.add(city2);
        //     city.options.add(city3);
        // }
        
        //使用数组,根据选择的省份的索引,动态添加城市
        for(var i = 0; i < array[index-1].length; i++){
            //添加选项
            city.options.add(new Option(array[index-1][i],array[index-1][i]));
        }
    }
</script>            

 例子:实现日期的级联效果,要求在界面中显示年月日,年(2020-2050)月(1-12)日(根据年月判断日期)

 

例子:通过数组进行实现抽奖效果

  通过随机遍历获取数组中的值

  通过innerHTML将数组中的值写入文本框中

  写入以后将该值从数组中删除

  

<!DOCTYPE html>
<html>
<head>
    <title></title>
</head>
<style type="text/css">
    .container{
        width: 400px;
        border: 1px solid;
        margin: auto;
        margin-top: 100px;
    }
    .content{
        height: 400px;
        background-color: gray;
        color: white;
        font-size: 50px;
        line-height: 400px;
        text-align: center;  //居中显示
    }
    .btnDiv{
        text-align: center;
    }
    .result{
        color: #363CD2;
        width: 1000px;
        margin: auto;
        margin: 50px;
    }
</style>
<body>
  <div class="container">
       <!-- 滚动抽奖字幕 -->
      <div class="content">admin</div>
      <!-- 抽奖按钮 -->    <div class="btnDiv">    <input type="button" class="btn" value="抽奖" name="">    </div>   </div>
<!-- 中奖的结果名单 -->   <div class="result"></div> </body> </html> <script type="text/javascript"> //存储抽奖的名单 var array = new Array("梅明川","伟文浩","温浩","顾明宇","黄进午","徐泽", "李裕涛","钮胜","宫凤丽","杭文鹏","宣磊"); var content = document.querySelector(".content"); var btn = document.querySelector(".btn"); var result = document.querySelector(".result"); //定时器 var timer; /** * 轮播显示中奖信息 * [play description] * @return {[type]} [description] */ function showName(){ //产生一个随机索引:如果是5个人,则需要产生0-4,则将0-1乘以人数产生结果0.00001-5.99999,然后parseInt使其丢失精度(或者用Math.floor向下取整) var index = parseInt(Math.random()*array.length); //根据索引获取数组中的元素 var value = array[index]; //将元素显示在层中 content.innerHTML = value; //开启定时器反复显示抽奖的信息 timer = window.setTimeout("showName()",50); }
  //调用显示名单的方法 showName();   //点击按钮之后需要执行的操作 btn.onclick
= function(){
     //如果值为抽奖,则点击后出现中奖名单(停止循环并将抽到的并获取该元素的值查找索引后将元素删除)
if(this.value == "抽奖"){ //点击关闭按钮就要关闭定时器 window.clearTimeout(timer); //获取content中目前显示的值,写入中奖名单的层中 var value = content.innerHTML; //获取元素在数组中的索引 var index = arrayIndex(array,value); //将该值从数组中删除 array.splice(index,1); //将该值显示在result层中 result.innerHTML+="<span style='margin-right:20px'>"+value+"</span>"; //修改按钮的文本 this.value = "继续"; console.log(array.length); //数组的长度,如果长度为0 if(array.length == 0){ content.innerHTML = "GameOver"; //禁用按钮 btn.disabled = true; } }
     //如果按钮是继续,则继续循环名单
else{ showName(); this.value = "抽奖"; } }
   //获取元素索引的方法
function arrayIndex(array,value){ for(var i = 0; i < array.length; i++){ if(array[i] == value){ return i; } } } </script>

 

posted @ 2020-09-08 11:14  小小野生程序员sunny  阅读(157)  评论(0编辑  收藏  举报