zoukankan      html  css  js  c++  java
  • DOM练习3二级联动菜单(选择省份城市)

    1、html

      1 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
      2 <html>
      3   <head>
      4     <meta http-equiv="content-type" content="text/html; charset=UTF-8">
      5   </head>
      6   <body>
      7     <select id="provinceID">
      8         <option>选择省份</option>    
      9         <option>吉林省</option>    
     10         <option>辽宁省</option>    
     11         <option>山东省</option>    
     12     </select>
     13     <select id="cityID">
     14         <option>选择城市</option>    
     15     </select>
     16     <script type="text/javascript">
     17         
     18 //          1、定位省份,将当前选中的文本信息取出来
     19         var provinceElement = document.getElementById("provinceID");
     20         
     21 //        2、添加内容改变事件-onchange    
     22         provinceElement.onchange = function(){
     23             
     24 //            6、清空上次选中留下来的city信息
     25 //            清空原城市下拉框中的内容
     26             var cityElement = document.getElementById("cityID");
     27             var  cityElementArray = cityElement.options;
     28             var size = cityElementArray.length;
     29             for(var i=1;i<size;i++){
     30                 //cityElement.removeChild(cityElementArray[i]);
     31                 /*
     32                  * 上面这句是不正确的,如果从前移除后面的,因为移除一个元素后,后面的元素会顶上去
     33                  * 导致删除不干净。
     34                  */
     35                 cityElement.removeChild(cityElementArray[1]);//从1开始删除,保留选择城市这项
     36             }
     37             /*或者
     38              * for(var i=size-1;i>0;i--){
     39                     citySelectElement.removeChild(cityElementArray[i]);
     40                 }
     41              */
     42 //            3、取得用户选中时的省份信息
     43 //            定位用户选择的选项
     44             var optionElement = this[this.selectedIndex];
     45 //            取出选中的文本信息
     46             var option = optionElement.firstChild.nodeValue;
     47 //            alert(option);//用户选中的省份
     48 
     49 //            4、加载xml文件,将用户选中的省份和xml文件的的省份进行比较,然后将对应的省份取出来
     50 //            加载xml文件
     51             var xmlDocument = loadXML();
     52 //            去xml文件中查找<province>标签的集合
     53             var provinceElementArray = xmlDocument.getElementsByTagName("province");
     54             var size = provinceElementArray.length;
     55 //            alert(size);//3个省份
     56             var provinceElement = null;//记住选中的省份
     57 //            循环迭代
     58             for(var i=0;i<size;i++){
     59                 //alert(provinceElementArray[i].nodeName);
     60                 //alert(provinceElementArray[i].getAttribute("name"));//将每个省份的name属性值读取出来了
     61                 if(provinceElementArray[i].getAttribute("name")==option){
     62                     //alert(option);
     63                     provinceElement = provinceElementArray[i];
     64                     break;
     65                 }
     66             }
     67 //            5、将取出来的省份,到xml中将其下面的城市取出来,然后创建文本节点,option节点,加入到cityID中去
     68             if(provinceElement!=null){
     69 //                取得该<province>下对应的所有<city>子标签
     70                 var cityElementArray = provinceElement.getElementsByTagName("city");
     71                 var citySize = cityElementArray.length;
     72                 //alert(citySize);//某一个省份下面的city个数
     73                 for(var i=0;i<citySize;i++){
     74                     
     75 //                    取得<city>标签的内容
     76                     var city = cityElementArray[i].firstChild.nodeValue;
     77                     //alert(city);//具体的某一个城市
     78 //                    创建option对象
     79                     var optionEle = document.createElement("option");
     80 //                    创建文本对象
     81                     var textElement = document.createTextNode(city);
     82 //                    将文本加入到option中去
     83                     optionEle.appendChild(textElement);
     84 //                    将新创建的option添加到cityID中去
     85                     document.getElementById("cityID").appendChild(optionEle);//此时前面添加的还会出现
     86                 }
     87             }
     88             
     89         }
     90       </script>
     91     <script type="text/javascript">
     92         //二级菜单联动
     93         //加载xml文件
     94         function loadXML(){
     95             try {
     96 //                IE
     97                 xmlDoc = new ActiveXObject("microsoft.xmlDOM");
     98             } catch (e) {
     99 //                非IE
    100                 try{
    101                     xmlDoc = document.implementation.createDocument("","",null);
    102                 }catch(e){
    103                     alert(e.message);
    104                     return;
    105                 }
    106             }
    107             
    108             xmlDoc.async = false;
    109             xmlDoc.load("cities.xml");
    110             return xmlDoc;
    111         }
    112             //异步加载关闭,即同步操作
    113             //请求->响应->请求->响应(同步)
    114             //请求->请求->请求->响应->响应->响应(异步)
    115     </script>
    116   </body>
    117 </html>

    2、xml

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <china>
     3     <province name="吉林省">
     4         <city>长春[吉林省]</city>
     5         <city>吉林市[吉林省]</city>
     6         <city>松原[吉林省]</city>
     7         <city>通化[吉林省]</city>
     8     </province>
     9     <province name="辽宁省">
    10         <city>沈阳[辽宁省]</city>
    11         <city>大连[辽宁省]</city>
    12         <city>鞍山[辽宁省]</city>
    13         <city>抚顺[辽宁省]</city>
    14         <city>铁岭[辽宁省]</city>
    15     </province>
    16     <province name="山东省">
    17         <city>济南[山东省]</city>
    18         <city>青岛[山东省]</city>
    19         <city>威海[山东省]</city>
    20     </province>
    21 </china>    

     二、Ajax版

    1、jsp

     1 <%@ page language="java" pageEncoding="UTF-8"%>
     2 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
     3 <html>
     4   <head>
     5     <meta http-equiv="content-type" content="text/html; charset=UTF-8">
     6   </head>
     7   <body>
     8     <select id="provinceID">
     9         <option>选择省份</option>    
    10         <option>吉林省</option>    
    11         <option>辽宁省</option>    
    12         <option>山东省</option>    
    13     </select>
    14     <select id="cityID">
    15         <option>选择城市</option>    
    16     </select>
    17     <script type="text/javascript">
    18 
    19         
    20         //1、添加事件改变事件
    21         document.getElementById("provinceID").onchange = function(){
    22 
    23             //去掉重复
    24             var cityElement1 = document.getElementById("cityID");
    25             var cityElementArray = cityElement1.options;
    26             var size = cityElementArray.length;
    27             for(var i=1;i<size;i++){
    28                 cityElement1.removeChild(cityElementArray[1]);
    29             }
    30             //alert("改变了");
    31             //取得改变的文本
    32             var optionElement = this[this.selectedIndex];
    33             var province = optionElement.firstChild.nodeValue;
    34             //alert(option);
    35             //2、创建XHR对象
    36             var xhr = createXHR();
    37             //事件监听
    38             xhr.onreadystatechange = function(){
    39                 if(xhr.readyState==4){
    40                     //alert(4);
    41                     if(xhr.status==200){
    42                         //alert(200);
    43                         var docXML =  xhr.responseXML;
    44                         //alert(docXML);
    45                         var cityElementArray = docXML.getElementsByTagName("city");
    46                         var size = cityElementArray.length;
    47                         //alert(size);
    48                         //获取jsp的city和创建option节点
    49                         var cityElement = document.getElementById("cityID");
    50                         
    51                         for ( var int = 0; int < size; int++) {
    52                         var optionElement =  document.createElement("option");
    53                             optionElement.innerHTML = cityElementArray[int].innerHTML;
    54                             //alert(cityElementArray[int].innerHTML);
    55                             cityElement.appendChild(optionElement);
    56                         }
    57                     }
    58                 }
    59             };
    60             //3、发送
    61             xhr.open("get","/myday31/CityServlet?province="+province+"&time="+new Date().toString(),true);
    62             xhr.send(null);
    63         };
    64         
    65         //创建XHR对象的方法
    66         function createXHR(){
    67             var xhr = null;
    68             try{
    69                 //ie
    70                 xhr = new ActiveXObject("microsoft.xmlhttp");
    71             }catch(e){
    72                 //非ie
    73                 xhr = new XMLHttpRequest();
    74             }
    75             return xhr;
    76         }
    77     </script>
    78   </body>
    79 </html>

     2、Servlet

     1 import java.io.IOException;
     2 import java.io.PrintWriter;
     3 
     4 import javax.servlet.ServletException;
     5 import javax.servlet.http.HttpServlet;
     6 import javax.servlet.http.HttpServletRequest;
     7 import javax.servlet.http.HttpServletResponse;
     8 
     9 public class CityServlet extends HttpServlet {
    10 
    11     public void doGet(HttpServletRequest request,
    12             HttpServletResponse response) throws ServletException,IOException {
    13         
    14         String province = request.getParameter("province");
    15         byte[] buf = province.getBytes("ISO8859-1");
    16         province = new String(buf,"utf-8");
    17         response.setContentType("text/xml;charset=utf-8");
    18         System.out.println(province);
    19         PrintWriter pw = response.getWriter();
    20         pw.write("<root>");
    21         if(province.equals("吉林省")){
    22             pw.write("<city>长春[吉林省]</city>");
    23             pw.write("<city>吉林市[吉林省]</city>");
    24             pw.write("<city>松原[吉林省]</city>");
    25             pw.write("<city>通化[吉林省]</city>");
    26         }else if(province.equals("辽宁省")){
    27             pw.write("<city>沈阳[辽宁省]</city>");
    28             pw.write("<city>大连[辽宁省]</city>");
    29             pw.write("<city>鞍山[辽宁省]</city>");
    30             pw.write("<city>抚顺[辽宁省]</city>");
    31             pw.write("<city>铁岭[辽宁省]</city>");
    32         }else if(province.equals("山东省")){
    33             pw.write("<city>济南[山东省]</city>");
    34             pw.write("<city>青岛[山东省]</city>");
    35             pw.write("<city>威海[山东省]</city>");
    36         }
    37         pw.write("</root>");
    38     }
    39 
    40 }
  • 相关阅读:
    撩课-Python-每天5道面试题-第8天
    声明提前、原型、静态方法的一些所得
    梳理ajax
    两数之和、整数反转、回文数
    node 基础API(fs)
    node 基础API(event)
    node 基础API(Buffer)
    node 基础API(path)
    node 调试技巧
    node process(进程) 几个常用属性
  • 原文地址:https://www.cnblogs.com/hacket/p/3060622.html
Copyright © 2011-2022 走看看