JS操作DOM元素代码的编写

JS操作DOM元素代码的编写

DOM树


传统的html文档顺序是:document->html->(head,body)

根据 DOM,HTML 文档中的每个成分都是一个节点。
整个文档是一个文档节点 
每个 HTML 标签是一个元素节点 
包含在 HTML 元素中的文本是文本节点 
每一个 HTML 属性是一个属性节点 
注释属于注释节点 

一、document对象(DOM核心对象)
1、dom属性
  title  返回或设置当前文档的标题
  URL    返回当前文档的url
  bgColor 设置文档的背景色
  fgColor  设置文档的前景色(设置文字颜色)

   alert(document.title)
   document.title="HelloWorld";
   alert(document.URL)
   alert(location.href)
   document.bgColor="red";
   document.fgColor="blue";

2.dom获取节点方法
   getElementById(idname)  返回拥有指定id的(第一个)对象的引用

   getElementsByTagName(tagname)  返回带有指定标签名的对象的集合 

   getElementsByName(name)  返回带有指定name指定名称的对象的集合,主要是适用于表单

   write() 

 缺点 1.浪费内存 2.逻辑性不强。一般通过节点之间的关系属性获取节点

<Script>
 window.onload=function  () {
    //方法 getElementById(idname)
    var div1=document.getElementById("one");
	alert(div1.innerHTML)

    //getElementsByTagName(tagname)
  var divs=document.getElementsByTagName("div");
  var lengths=divs.length;
  //alert(lengths)
  //通过下标来访问
    //alert(divs[1].innerHTML)
	for (var i=0; i<lengths; i++) {
	alert(divs[i].innerHTML)
	}

  //getElementsByName(name)
  var inputs=document.getElementsByName("text1");
  var lengths=inputs.length;
  alert(lengths)

document.write()//不换行的输出,
document.writeln()//换行输出
 }
</script>

<body>
<div name="div1" id="one">
 1
</div>
<div name="div1" id="one">
 
</div>
<form name="myform" id="form1">
 <input type="text" name="text1" value="张三">
 <input type="text" name="text2" value="李四">

</form>
</body>

 getElementsByClassName()   返回带有指定classname指定名称的对象的集合

   function byclass (classname) {
      if(document.getElementsByClassName){
	    return document.getElementsByClassName(classname)
	  }else{
	    var tag= document.getElementsByTagName("*");
         var lengths=tag.length;
		 var divs=[];
		 for (var i=0; i<lengths; i++) {
		    if(tag[i].className==classname){
			   divs.push(tag[i])
			}
		 }
		 return divs;
	  }
	  
   }

 alert(byclass("aaa").length)
<div name="div1" id="one" class="aaa">
</div>
<div name="div1" id="one" class="aaa">
</div>

二、节点三属性:  

文档中的每个成分都是一个节点.(包括文本也是节点),节点三个属性 :
  1. nodeName : 节点的名称
  2. nodeValue :节点的值
  3. nodeType :节点的类型
节点的属性
        a. nodeName(节点名称) 
            元素节点的 nodeName 是标签名称 
            属性节点的 nodeName 是属性名称 
            文本节点的 nodeName 永远是 #text 
            文档节点的 nodeName 永远是 #document 

       b. nodeValue(节点值) 
         1. 元素节点的 nodeValue 是 undefined 或 null
    2. 文本节点的 nodeValue 是文本自身
    3. 属性节点的 nodeValue 是属性的值

<body>
<div>文本</div>
<div>文本</div>
</body>
1、innerHTML可以作为获取文本的方法也可以作为修改文本内容的方法
element.innerHTML 会直接返回element节点下所有的HTML化的文本内容
document.body.innerHTML //返回"<div>文本</div><div>文本</div>";

同样逆向的:

document.body.innerHTM="<div>文本</div><div></div>"会生成
!注意 innerHTML方法只能作用于元素节点调用;文本节点并不能使用这个方法返回undefined!
2、nodeValue是一个HTML DOM的对象属性;

同样的 可以通过 nodeValue设置节点的文本内容也可以直接返回文本内容

直接用节点对象调用就都可以: 

document.getElementsByTagName(div)[0].childNodes[0].nodeValue //返回“文本”

另外 nodeValue 属性并不只存在于文本节点下 元素节点和属性节点对象也都具有nodeValue属性
3、textContent
与innerHTML方法类似会返回对象节点下所有的文本内容

但是区别为 textContent返回的内容只有去HTML化的文本节点的内容 如上例:

document.body.textContent //返回"文本文本" !注意在DOM中标签换行产生的空白字符会计入DOM中作为文本节点

另外IE8以前不支持textContent属性
4、innerText方法
与textContent方法类似 并且和innerHTML一样也是作用于元素节点上

但是浏览器对于这两种方法解析空白字符的机制不一样;不是很常用

类似的还有outText outHTML等类似操作文本相关的方法,不是很常用不介绍了;

最后要提醒一点:文本与文本节点一定要区分,有些方法是依靠元素节点返回子文本内容,有些方法是文本节点返回自身文本内容,文本节点是对象而文本只是字符串;

  c. nodeType(节点类型)  : nodeType 属性可返回节点的类型。  
             节点类型           节点名字        节点值
            nodeType(数值)       nodeName      nodeValue

元素节点         1                标签名                    null   
属性节点         2                属性名                  属性值
文本节点         3                 #text                      文本
注释节点         8                 #comment          注释的文字
文档节点         9                 #document              null

 1 <!DOCTYPE HTML>
 2 <html>
 3 <head>
 4 <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
 5 <title>节点属性</title>
 6 </head>
 7 <body>
 8     <ul>
 9         <li>javascript</li>
10         <li>HTML/CSS</li>
11         <li>jQuery</li>     
12     </ul>
13     <script type="text/javascript">
14         var node = document.getElementsByTagName("li");
15         for(var i = 0; i < node.length; i++){
16             document.write("节点名称:" + node[i].nodeName + "<br/>");
17             document.write("节点的值:" + node[i].nodeValue + "<br/>");
18             document.write("节点类型:" + node[i].nodeType + "<br/>");
19     }
20     </script>
21 </body>
22 </html>

  通过节点类型获得节点(兼容性的方法)

<script>
  window.onload=function  () {
    var lis=byclass("one");

	for (var i=0; i<lis.length; i++) {
	  lis[i].onclick=function  () {
	     if(nextnode(this).style.display==""){
		 nextnode(this).style.display="none";
		 }else{
		 nextnode(this).style.display="";
		 }
	  }
	}


    function byclass (classname) {
      if(document.getElementsByClassName){
	    return document.getElementsByClassName(classname)
	  }else{
	    var tag= document.getElementsByTagName("*");
         var lengths=tag.length;
		 var divs=[];
		 for (var i=0; i<lengths; i++) {
		    if(tag[i].className==classname){
			   divs.push(tag[i])
			}
		 }
		 return divs;
	  }
	  
   }

   function nextnode (obj) {
      var nexts=obj.nextSibling;
	  while (nexts.nodeType==3) {
	    nexts=nexts.nextSibling;
	  }
	  return nexts;
   }
  }
</script>


<body>
<ul>
   <li class="one">
     第一选项
   </li>
   <li>
      <ul>
	     <li>第一</li>
		 <li>第二</li>
		  <li>第三</li>
	  </ul>
   </li>
</ul>
<ul>
   <li class="one">
     第二选项
   </li>
   <li>
      <ul>
	     <li>第一</li>
		 <li>第二</li>
		  <li>第三</li>
	  </ul>
   </li>
</ul>
<ul>
   <li class="one">
     第三选项
   </li>
   <li>
      <ul>
	     <li>第一</li>
		 <li>第二</li>
		  <li>第三</li>
	  </ul>
   </li>
</ul>
</body>

三、 节点的关系属性

对象.parentNode  获得父节点的引用
对象.childNodes  获得子节点的集合
对象.firstChild  获得第一个子节点
对象.lastChild   获得第一个子节点\
对象.nextSibling 获得下一个兄弟节点的引用
对象.previousSibling 获得上一个兄弟节点的引用

缺点:兼容性不好。

通过一些属性可以来遍历节点树:

1、parentNode//获取所选节点的父节点,最顶层的节点为#document

<div id="text">
   <p id="con"> parentNode 获取指点节点的父节点</p>
</div> 
<script type="text/javascript">
   var mynode= document.getElementById("con");
    document.write(mynode.parentNode.nodeName);
</script>

parentNode 获取指点节点的父节点
DIV

 1 <div id="text"> 
 2     <p>
 3     parentNode 
 4     <span id="con"> 获取指点节点的父节点</span>
 5     </p>
 6 </div> 
 7 <script type="text/javascript">
 8     var mynode= document.getElementById("con");
 9     document.write(mynode.parentNode.parentNode.nodeName);
10 </script>

parentNode 获取指点节点的父节点
DIV

2、childNodes //获取所选节点的子节点们 

        <div id="myDiv">
            <p>html</p>
            <p>css</p>
            <p>javascript</p>
        </div>
        <p>jquery</p>

    <script>
        var div = document.getElementById("myDiv");
        alert(div.childNodes.length);//7

3、firstChild //firstChild 属性返回‘childNodes’数组的第一个子节点。如果选定的节点没有子节点,则该属性返回 NULL

node.firstChild
//与elementNode.childNodes[0]是同样的效果。 

4、lastChild //lastChild 属性返回‘childNodes’数组的最后一个子节点。如果选定的节点没有子节点,则该属性返回 NULL。
语法:

node.lastChild
//与elementNode.childNodes[elementNode.childNodes.length-1]是同样的效果。

找到指定元素(div)的第一个和最后一个子节点:

<div id="con"><p>javascript</p><div>jQuery</div><h5>PHP</h5></div>
  <script type="text/javascript">
       var x=document.getElementById("con");
        document.write(x.firstChild.nodeName + "<br/>");
        document.write(x.lastChild.nodeName + "<br/>");
    </script>

5、nextSibling //获取所选节点的后一个兄弟节点  列表中最后一个节点的nextSibling属性值为null

6、previousSibling //获取所选节点的前一兄弟节点   列表中第一个节点的previousSibling属性值为null

两个属性获取的是节点。Internet Explorer 会忽略节点间生成的空白文本节点(例如,换行符号),而其它浏览器不会忽略。
解决问题方法:
判断节点nodeType是否为1, 如是为元素节点,跳过。

1 <!DOCTYPE HTML>
 2 <html>
 3 <head>
 4 <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
 5 <title>nextSibling</title>
 6 </head>
 7 <body>
 8     <ul id="u1">   
 9         <li id="a">javascript</li>
10         <li id="b">jquery</li>   
11         <li id="c">html</li>   
12     </ul>   
13     <ul id="u2">   
14         <li id="d">css3</li>   
15         <li id="e">php</li>   
16         <li id="f">java</li>   
17     </ul>   
18     <script type="text/javascript">
19         function get_nextSibling(n){
20             var x=n.nextSibling;
21             while (x && x.nodeType!=1){
22                 x=x.nextSibling;
23             }
24             return x;
25         }
26     
27         var x=document.getElementsByTagName("li")[0];
28         document.write(x.nodeName);
29         document.write(" = ");
30         document.write(x.innerHTML);
31         
32         var y=get_nextSibling(x);
33         
34         if(y!=null){
35             document.write("<br />nextsibling: ");
36             document.write(y.nodeName);
37             document.write(" = ");
38             document.write(y.innerHTML);
39         }else{
40           document.write("<br>已经是最后一个节点");      
41         }
42     </script>
43 </body>
44 </html>
运行结果
LI = javascript 

nextsibling: LI = jquery

通过节点属性关系获取子节点兼容的方法

<script>
  window.onload=function  () {
 var outdiv=getElementById("outdiv")
 var innerdiv=getElementById("innerdiv")
 var outdiv=document.getElementById("outdiv");
 var childs=outdiv.childNodes;
 alert(childs.length)
//文档节点
alert(document.nodeType)
alert(document.nodeName)
alert(document.nodeValue)
for (var i=0; i<childs.length; i++) {
    alert(childs[i].nodeValue)
}
//父节点
var innerdiv=document.getElementById("innerdiv");
var father=innerdiv.parentNode;
alert(father.nodeName);
//最后一个子节点
var innerdiv=document.getElementById("innerdiv");
var last=innerdiv.lastChild;
alert(last.nodeName);
//获得所有子节点的兼容方法
function getchilds (obj) {
var childs=obj.childNodes;
var arr=[];
for (var i=0; i<childs.length; i++) {
if(childs[i].nodeType==3 && /^\s+$/.test(childs[i].nodeValue)){
 continue;
}else{
 arr.push(childs[i])
 }
}
return arr;
}
var outdiv=document.getElementById("outdiv")
alert(getchilds(outdiv).length)
//获得最后一子节点的方法
function last (obj) {
 var last=obj.lastChild;
 while(last.nodeType==3){
 last=last.previousSibling;
}
return last;
}

alert(last(outdiv).nodeName);
  }
</script>

<body>
<div id="outdiv" class="one">
  我是外层的div
  <p class="two">
     我是p标签
  </p>
  <div id="innerdiv" class="two">
    <span>
	  我是内层div里面的span标签
	</span>
	</div>
  <!--我是注释  后盾网视频教程-->
  <h3 class="two">
     我是h3标签
  </h3>
  <u class="two">我是下划线</u>
  </div>
</body>

四、对节点进行操作
   1、查找结点

     a. 采用节点之间的关系去拿 根节点: document.documentElement ;
     b. 采用方法去拿

     document.getElementById();//id名,在实际开发中较少使用,选择器中多用class  id一般只用在顶级层存在 不能太过依赖id

     document.getElementsByTagName();//标签名

     document.getElementsByClassName();//类名

     document.getElementsByName();//name属性值,一般不用

     document.querySelector();//css选择符模式,返回与该模式匹配的第一个元素,结果为一个元素;如果没找到匹配的元素,则返回null

      document.querySelectorAll()//css选择符模式,返回与该模式匹配的所有元素,结果为一个类数组

       <div id="myDiv">
            <p>html</p>
            <p>css</p>
            <p>javascript</p>
        </div>
        <p>jquery</p>

    <script>
        var div=document.getElementById("myDiv");
        var p1=div.getElementsByTagName("p");//在div下调用
        alert(p1.length);//3  div节点下的p元素只有三个
        var p2 = document.getElementsByTagName("p");
        alert(p2.length);//4  document节点下的p元素有四个
        var p3=document.querySelectorAll("p");
        alert(p3.length);//4
        document.body.appendChild(document.createElement("p"));//创建新元素P,并添加到body中
        alert(p1.length);//3   div节点下的p元素依然只有三个
        alert(p2.length);//5   在body中添加了一个新的P元素,该方法是“动态的”,因此,长度发生了变化
        alert(p3.length);//4   该方法是“静态的”,因此,无论发生什么变化,p3的值依然不会发生改变

 2、删除节点:
removeChild() : 采用父节点删除子节点

<div id="div1">
<p id="p1">这是一个段落。</p>
<p id="p2">这是另一个段落。</p>
</div>

<script>
var parent=document.getElementById("div1");
var child=document.getElementById("p1");
parent.removeChild(child);
</script>

相比于removeChild(),remove()方法不太常见,但是却非常简单。该方法不用调用其父节点,直接在当前节点使用remove()方法就可以删除该节点,无返回值

remove()方法常用于删除元素节点与文本节点,不可用于特性节点

<div id="test" title='div'>123</div>
<script>
//文本节点
console.log(test.childNodes[0]);//'123'
test.childNodes[0].remove();
console.log(test.childNodes[0]);//undefined

//特性节点
console.log(test.attributes.title);//'div'
//报错,remove()方法无法用于删除特性节点
try{test.attributes[0].remove()}catch(e){
    console.log('error');
}
//元素节点
console.log(test);
test.remove();
</script>

3、创建元素节点:
 document.createElement()  : 创建一个标签节点

var oDiv = document.createElement("div");
console.log(oDiv);//<div>
var oDiv = document.createElement('<div id="box"></div>');
console.log(oDiv.id);//'box'
var iframe = document.createElement("<iframe name = 'myframe'></iframe>");
var input = document.createElement("<input type='checkbox'>);
var button = document.createElement("<button type = 'reset'></button>");
var radio1 = document.createElement("<input type='radio' name ='choice' value = '1'>");
var radio2 = document.createElement("<input type='radio' name ='choice' value = '2'>");
所有节点都有一个ownerDocument的属性,指向表示整个文档的文档节点document;在使用createElement()方法创建新元素的同时,也为新元素设置了ownerDocument属性
<div id="myDiv"></div>
<script>
console.log(myDiv.ownerDocument);//document
var newDiv = document.createElement('div');
console.log(newDiv.ownerDocument);//document
console.log(newDiv.ownerDocument === myDiv.ownerDocument);//true
</script>

 创建属性节点
       document.createAttribute("属性名");
       对象.属性="属性值"
       对象.setAttribute(属性名,属性值)
       对象.getAttribute(属性名,属性值)

1.操作内容
    1.innerHTML  用来设置或获取对象起始和激素标签内的内容(识别html标签)  
    2.innerText  用来设置或获取对象起始和激素标签内的内容 (IE)
      textContent用来设置或获取对象起始和激素标签内的内容 (FF)

    3.outerHTML  用来设置或获取包括本对象在内起始和激素标签内的内容(识别html标签)  
      outerText  用来设置或获取包括本对象在内起始和激素标签内的内容

<script>
  function getContent (objs,val) {
     if(document.all){
	   if(val){
	     objs.innerText=val
	   }else{
	      return  objs.innerText
	   }
	 }else{
	    if(val){
	     objs.textContent=val
	   }else{
	      return  objs.textContent
	   }
	 
	 }
  }
  window.onload=function  () {
    var div1=document.getElementById("div1");
	var div2=document.getElementById("div2");
	var but=document.getElementById("but");
     but.onclick=function  () {
	    //var contents=div1.innerHTML;
		//div2.innerHTML=contents;
		 var contents=getContent(div1)
		getContent(div2,contents);
     }
  }
</script>

2.操作属性
    1.直接操作
      对象.属性  
      对象.属性=值  (设置、获取、添加属性(属性值))

    2. getAttribute("属性")  获取给定的属性的值
        setAttribute("属性","值")  设置或是添加属性

<script>
  window.onload=function  () {
    var links=document.getElementsByTagName("a")[0];
	//alert(links.href)
	//links.href="2.html";
	//alert(links.title)
	//links.title="百度";
	//links.title="百度";
	 //getAttribute("属性")  获取给定的属性的值
     // setAttribute("属性","值")  设置或是添加属性

	 alert(links.getAttribute("href"))
	 links.setAttribute("href","2.html")
	
  }
</script>


<body>
 <a href="1.html"  >链接</a>
</body>

3、操作样式

   1.行内样式
     对象.style.属性
     对象.style.属性=值   (设置、获取、添加属性)
     ****************************************************
     遇到属性是"-"链接的,要将"-"去掉,后面的单词的首字母大写
     ****************************************************

   2.css层叠样式

   3.行内样式和css层叠样式通用的方式

<script>
window.onload=function  () {
  var one=document.getElementById("one");
  one.onmouseover=function  () {
    //alert(one.style.color)
     one.style.color="blue";
	 one.style.backgroundColor="red";
	 one.style.fontSize="13px";
  }
  one.onmouseout=function  () {
     one.style.color="red";
	 one.style.backgroundColor="blue";
	 one.style.fontSize="11px";

  }
}
</script>

<a href="#" style="color:red;background-color:blue;padding:3px" id="one">链接</a>

css层叠样式的操作

1.通过ID来更改样式,通过className更改样式

<style>
   #one{
     width:200px;
	 height:200px;
	 border:1px solid red;
	 color:red;
	 font-size:14px;
	 padding:24px;
   }
   #two{
     width:200px;
	 height:200px;
	 border:1px solid blue;
	 color:blue;
	 font-size:19px;
	 padding:15px;
   }
</style>
<script>
   window.onload=function  () {
      var one=document.getElementById("one");
	  var but=document.getElementById("but");
      but.onclick=function  () {
	    one.id="two";
      }

   }
   window.onload=function  () {
      var one=document.getElementById("one");
	  var but=document.getElementById("but");
      but.onclick=function  () {
	    one.className="div2";
      }
</script>

<div id="one" class="div1"></div>

2.更改或者获取或者设置某个属性的值

document.styleSheets[下标].rules[下标].style.属性
document.styleSheets[下标].rules[下标].style.属性=值

document.styleSheets   样式表的集合
document.styleSheets[0].rules   样式规则的列表
document.styleSheets[0].rules.style  样式规则的集合
document.styleSheets[下标].rules[下标].style.属性
适用于IE
**************************************************************
document.styleSheets[下标].cssRules[下标].style.属性
document.styleSheets[下标].cssRules[下标].style.属性=值
适用于FF
***************************************************************

document.styleSheets[0].rules[0].style.width
cssrule().width
cssrule().height="500px";
cssrule().margin="100px";

function cssrule (a,b) {
  var a= a || 0;
  var b= b ||0;
  if(document.all){
   return  document.styleSheets[a].rules[b].style 
  }else{
  return document.styleSheets[a].cssRules[b].style
  }
}
var b= b ||0;
如果b不等于undefined和null,也就是说b有东西那a就等于b的值
不然就等于默认值0
var a= b || c
在js中,这相当于一个赋值语句,如果b的值大于0或为true,那么就把b的值赋给a,否在就把c的值赋给
布尔值,javascript中以下值会被转换为false
1.false 2.undefined 3.null 4.0 5.-0 6.NaN 7."" 8.''

3.动态的添加删除css样式规则
 document.styleSheets[下标].insertRule("选择器{属性:值}",位置)    deleteRule(位置)

document.styleSheets[下标].addRule("选择器","属性:值",位置)
document.styleSheets[0].addRule(".div1","margin:200px",0);
document.styleSheets[0].removeRule(1);
//对象.currentStyle.属性  IE   用来获得实际的样式属性
//getComputedStyle(对象,null)   FF  用来获得实际的样式属性
 var one=document.getElementById("one");
one.currentStyle.width
getComputedStyle(one,null).width

具体使用

动态生成iframe

		var strUrl = Leopard.getContextPath() +
		"/DoMyServlet?className=ExcelPoiAction&methodName=createExcel&btnCode=empdata&forWard=isFile&namesalt="+namesalt+"&func="+_func
	    +"&pbean="+encodeURI(encodeURI(strwhere))+"&btnCode"+empexcel;
		var ifm;
		if (document.getElementById("empexcel_iframe") == undefined) {
			ifm = document.createElement("IFRAME");
			ifm.setAttribute("id", "empexcel_iframe");
			ifm.setAttribute("name", "empexcel_iframe");
			ifm.style.height = "0";
			ifm.style.width = "0";
			ifm.style.display = "block";
			ifm.src = "";
			document.body.appendChild(ifm);
			document.getElementById("empexcel_iframe").attachEvent(
					"onload",
					function() {
						window.frames['empexcel'].document.getElementById("empexcel").click();
					});
		} else {				ifm = document.getElementById("empexcel_iframe");			}
		ifm.src = strUrl; 
public class ExcelPoiAction {
public void createExcel() throws IOException {
		HttpServletRequest req = Request.getInst();
		this.funcCode = req.getParameter("func");		//功能单元
		//this.strWhere = req.getParameter("pbean");		//附件查询条件
		this.strWhere =	java.net.URLDecoder.decode(req.getParameter("pbean"),"utf-8");
		if (!StringUtils.isEmpty(strWhere)) {
			try {
				objWhere = new JSONObject("{" + strWhere + "}");
			} catch (JSONException e) {}
		}
		//获取业务参数
		String busiStr = req.getParameter("busiData");
		if(!StringUtils.isEmpty(busiStr)){
			try {
				this.busiData = JsonUtils.transferToBean(busiStr);
			} catch (Exception e) {}
		}
		exeFuncAct("beforeEmp");					//导出前执行
		HttpServletResponse resp = Response.getInst();
		resp.setContentType("application/x-msdownload;charset=GBK");
		String personBtnCode = req.getParameter("btnCode")==null?this.btnCode:req.getParameter("btnCode").toString();
		String path = getDemoDirSource();// 存储路径
		String name = getDemoName(personBtnCode);// 模板名称
		
		//12.21修改
	    String demoSourcre = path + "/" + name;// 模板绝对路径
	    
	    String nameSalt = req.getParameter("namesalt");  
	    if(!StringUtils.isEmpty(nameSalt)){
	      String fileName = name.split("\\.")[0] +"_"+nameSalt+"."+name.split("\\.")[1];
	      resp.setHeader("Content-Disposition", "attachment; filename=" + ENCODE(fileName, "ISO-8859-1"));
	    }else{
	      resp.setHeader("Content-Disposition", "attachment; filename=" + ENCODE(name, "ISO-8859-1"));
	    }
		// 输出流
		OutputStream out = resp.getOutputStream();
		// 获取数据
		Map<String, List<Map<String, Object>>> data = InitDataByFuncExcelConfig();

		CreateExcel excel = new CreateExcel(demoSourcre, out, busiData);
		excel.setData(data);

		// 创建数据
		excel.CreateEx();
		exeFuncAct("afterEmp");
	}
}

创建文本节点
对象.innerHTML="";
document.createTextNode("文本");

 docuemnt.createTextNode("内容") :创建一个文本节点

var elea=document.createElement("a");
 elea.href="#";
 elea.title="我是一个链接";
 elea.innerHTML="链接";
 elea.style.color="red";
var eleh3=document.createElement("h3");
var h3text=document.createTextNode("百度");
eleh3.appendChild(h3text);
var elep=document.createElement("p");
elep.innerHTML="我是p标签";

divs=document.createElement("div");
divs.style.width="500px"
divs.style.height="300px";
divs.style.border="5px solid red";
divs.style.position="absolute";
divs.style.top="100px";
divs.style.left="260px";
var innerbut=document.createElement("a");
innerbut.innerHTML="X";
innerbut.style.styleFloat="right";

4、添加结点:

 parentNode.insertBefore(someNode,designatedNode):

 父对象.insertBefore(要插入的对象,之前的对象)将某个元素插入到指定的节点(designatedNode)前
 parentNode.appendChild(someNode):向元素内末尾插入某个节点

 父对象.appendChild(追加的对象)  插入到最后

<div id="div1">
<p id="p1">这是一个段落</p>
<p id="p2">这是另一个段落</p>
</div>

<script>
var para=document.createElement("p");
var node=document.createTextNode("这是新段落。");
para.appendChild(node);

var element=document.getElementById("div1");
element.appendChild(para);
</script>

appendChild() 方法向节点添加最后一个子节点。

<ul id="myList1"><li>Coffee</li><li>Tea</li></ul>
<ul id="myList2"><li>Water</li><li>Milk</li></ul>

<button onclick="myFunction()">亲自试一试</button>

<script>
function myFunction()
{
var node=document.getElementById("myList2").lastChild;
document.getElementById("myList1").appendChild(node);
}
</script>

<script type="text/javascript">
	function modifyDOM(){
		document.getElementById("txt").innerHTML="用户名:";
		document.getElementById("userName").value="Jack";
	}
	
	function addDOM(){
		var para=document.createElement("p");
		var node=document.createTextNode("...前...");
		var para2=document.createElement("p");
		var node2=document.createTextNode("...后...");
		para.appendChild(node);
		para2.appendChild(node2);
		var parent=document.getElementById("parent");
		var son1=document.getElementById("son1");
		parent.insertBefore(para, son1);
		parent.appendChild(para2);
	}
	
	function removeDOM(){
		var parent=document.getElementById("parent");
		var son1=document.getElementById("son1");
		parent.removeChild(son1);
	}
</script>

<body>
<div id="parent">
	<div id="son1">
		<font id="txt">:</font><input type="text" id="userName" name="userName"/>
	</div>
</div>
<input type="button" value="修改DOM节点" onclick="modifyDOM()"/>
<input type="button" value="添加DOM节点" onclick="addDOM()"/>
<input type="button" value="删除DOM节点" onclick="removeDOM()"/>
</body>

删除节点,父对象.removeChild(删除的对象)。如果确定要删除节点,最好也清空内存  对象=null;

<script>
  window.onload=function  () {
     var but=document.getElementById("but");

	 but.onclick=function  () { 	 
	    divs=document.createElement("div");
		var innerbut=document.createElement("a");
	    innerbut.innerHTML="X";
		divs.appendChild(innerbut);
		document.body.appendChild(divs);
       innerbut.onclick=function  () {
          document.body.removeChild(divs);
		  divs=null;
	   }
	   
	 }
  }
</script>

<input type="button" value="登录" id="but">

修改(替换)节点,父对象.replaceChild(要修改的对象,被修改的);

<script>
  window.onload=function  () {
   var elea=document.createElement("a");
	//document.body.appendChild(elea);
   var innerdiv=document.getElementById("innerdiv");
    var spans=innerdiv.firstChild;
	var eleh3=document.createElement("h3");
	var h3text=document.createTextNode("百度");
	    eleh3.appendChild(h3text);
	    innerdiv.insertBefore(eleh3,spans);
   var elep=document.createElement("p");
   elep.innerHTML="我是p标签";
   innerdiv.replaceChild(elep,eleh3)
   innerdiv.removeChild(elep)
   elep=null;
   alert(elep.innerHTML)
  }
</script>


<div id="outdiv" class="one">
  我是外层的div
  <p class="two">
     我是p标签
  </p>
  <div id="innerdiv" class="two">
    <span>
	  我是内层div里面的span标签
	</span>
	</div>
  <!--我是注释  百度-->
  <h3 class="two">
     我是h3标签
  </h3>
  <u class="two">我是下划线</u>
  </div>
</body>
	<div id="parent">
	<div id="son1">
		<font id="txt">:</font><input type="text" id="userName" name="userName"/>
	</div>
    </div>
	function addDOM(){
		var para=document.createElement("p"); //创建元素
		var node=document.createTextNode("...前...");//创建文本,给p里面加内容
		var para2=document.createElement("p");
		var node2=document.createTextNode("...后...");
		para.appendChild(node);
		para2.appendChild(node2);
		var parent=document.getElementById("parent");
		var son1=document.getElementById("son1");
		parent.insertBefore(para, son1);
		parent.appendChild(para2);
	}
	
	function removeDOM(){
		var parent=document.getElementById("parent");
		var son1=document.getElementById("son1");
		parent.removeChild(son1);
	}

5、修改或替换结点:
    parentNode.replaceChild(someNode,replacedNode):用某个元素替换某个被替换的元素
    parentNode.removeChild(someNode):移除某个节点 注意以上的操作节点方法都是在指定父节点才能使用的。

<html>
<head>
      <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
      <title>HTML DOM</title>
  <script type=text/javascript>
      function replaceMessage()
      {
       var oNewp=document.createElement("p");
       var oText=document.createTextNode("World Hello");
       oNewp.appendChild(oText);
       var oOldp=document.body.getElementsByTagName("p")[0];
       oOldp.parentNode.replaceChild(oNewp,oOldp);
      }
      </script>
</head>
<body onload="replaceMessage();">
      <p>hello world!</p>
</body>
</html>

6、其他节点操作方法:

cloneNode(boolean):克隆节点,参数是一个布尔值,true代表深度复制,包含复制节点的子节点;false为浅复制,不包含子节点。此方法适合所有的节点。

<ul id="list">
    <li>1</li>
    <li>2</li>
    <li>3</li>
    <li>4</li>
    <li>5</li>
    <li>6</li>        
</ul>
<script>
var oList = document.getElementById('list');
oList.index = 0;

var deepList = oList.cloneNode(true);
//成功复制了子节点
console.log(deepList.children.length);//6
//但并没有复制属性
console.log(deepList.index);//undefined
var shallowList = oList.cloneNode();
//浅复制不复制子节点
console.log(shallowList.children.length);//0
</script>

7、修改文本节点

appendData(data); 将data加到文本节点后面

deleteData(start,length); 将从start处删除length个字符

insertData(start,data) 在start处插入字符,start的开始值是0;

replaceData(start,length,data) 在start处用data替换length个字符 splitData(offset) 在offset处分割文本节点

substringData(start,length) 从start处提取length个字符 

8、属性操作

getAttribute(name) 通过属性名称获取某个节点属性的值

setAttribute(name,value); 修改某个节点属性的值

removeAttribute(name) 删除某个属性 

<html>
<head>
   <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
   <title>HTML DOM</title>
   <script type=text/JavaScript>
   function   Load_message()
   {
    var oimg=document.getElementById("a");
       alert(oimg.getAttribute("border"));
    oimg.setAttribute("alt","DOM Test");
   }
   </script>
</head>
<body onload="Load_message();">
   <img border="0" width="100" height="150" id="a"/>
</body>
</html>

js动态生成表格

动态生成表格

	<table id="studentTable" align="center" border="1px;" cellpadding="0px;">
			<tr>
				<th>姓名</th><th>年龄</th><th>得分</th>
			</tr>
		        </table>
		
				var dataObj=eval("("+xmlHttp.responseText+")");
				var st=document.getElementById("studentTable");
				alert(dataObj.students.length);
				var newTr; // 行
				var newTd0; // 第一列
				var newTd1; // 第二列
				var newTd2; // 第三列
				for(var i=0;i<dataObj.students.length;i++){
					var student=dataObj.students[i];
					newTr=st.insertRow();
					newTd0=newTr.insertCell();
					newTd1=newTr.insertCell();
					newTd2=newTr.insertCell();
					newTd0.innerHTML=student.name;
					newTd1.innerHTML=student.age;
					newTd2.innerHTML="语文:"+student.score.chinese+",数学:"+student.score.math+",英语:"+student.score.english;
				}

添加表单行

	<script type="text/javascript">
		function addOptions(){
			//创建一个新的节点
			//第一种方式
			/*var option = document.createElement("option") ;
			option.value = "小学" ;
			option.text = "小学" ;

			//拿到下拉框,加入小学
			document.getElementsByTagName("select")[0].options.add(option) ;*/
			
			//第二种方式
			//获得select对象
			//var select = document.getElementsByTagName("select")[0] ;

			//select.innerHTML = select.innerHTML + "<option value = '小学'>小学</option>" ;

			//第三种
			var option = document.createElement("option") ;
			option.value = "小学" ;
			option.text = "小学" ;

			//获得select对象
			var select = document.getElementsByTagName("select")[0] ;
			select.appendChild(option); 


		}

		function fun(){
			//拿到div对象
			var d = document.getElementById("d") ;
			//创建一个img标签对象
			var img = document.createElement("img") ;
			//指定属性
			img.src = "images/1.jpg" ;
			img.style.width = "200px" ;
			img.height = "300" ;

			//将图片添加到div标签中
			d.appendChild(img) ;
		}
	</script>
 <body>
	<input type="button" value="添加选项" onclick="addOptions()"/>
	<input type="button" value="添加一副图片" onclick="fun()">
	<select>
		<option>本科</option>
		<option>专科</option>
		<option>高中</option>
		<option>初中</option>
	</select>
	
	<div id = "d"></div>

 </body>

 

 

 

 

 

jquery操作dom节点

1.内部插入

$("p").append("<b>nick</b>");    //每个p元素内后面追加内容
$("p").appendTo("div");        //p元素追加到div内后
$("p").prepend("<b>Hello</b>");  //每个p元素内前面追加内容
$("p").prependTo("div");        //p元素追加到div内前

2.外部插入

$("p").after("<b>nick</b>");     //每个p元素同级之后插入内容
$("p").before("<b>nick</b>");    //在每个p元素同级之前插入内容
$("p").insertAfter("#test");     //所有p元素插入到id为test元素的后面
$("p").insertBefore("#test");    //所有p元素插入到id为test元素的前面

3.替换

$("p").replaceWith("<b>Paragraph. </b>");    //将所有匹配的元素替换成指定的HTML或DOM元素
$("<b>Paragraph. </b>").replaceAll("p");     //用匹配的元素替换掉所有 selector匹配到的元素

4.删除

$("p").empty();     //删除匹配的元素集合中所有的子节点,不包括本身
$("p").remove();    //删除所有匹配的元素,包括本身
$("p").detach();    //删除所有匹配的元素(和remove()不同的是:所有绑定的事件、附加的数据会保留下来)

5.复制

$("p").clone()      //克隆元素并选中克隆的副本
$("p").clone(true)   //布尔值指事件处理函数是否会被复制
	$(document).ready(function(){
		// 操作DOM节点
		// 1,查找节点
		/* var li2=$("ul li:eq(1)");
		var li2_txt=li2.text();
		alert(li2_txt); */
		
		// 2,创建节点
		/* var li1=$("<li title='这是马化腾'>马化腾</li>");
		var li2=$("<li title='这是李彦宏'>李彦宏</li>");
		var li22=$("ul li:eq(1)");
		$("ul").append(li1);
		li2.insertAfter(li22); */
		
		// 3,删除节点
		// $("ul li:eq(1)").remove();
		
		// 操作DOM属性
		// 获取属性
		/* var li2=$("ul li:eq(1)");
		var li2_attr=li2.attr("title");
		alert(li2_attr); */
		
		// 设置属性
		// $("ul li:eq(1)").attr("title","你懂的");
		
		// 删除属性
		// $("ul li:eq(1)").removeAttr("title");
		
		// 操作DOM节点样式
		// 获取样式
		/* var li2=$("ul li:eq(1)");
		var li2_class=li2.attr("class");
		alert(li2_class); */
		
		// 设置样式
		// $("ul li:eq(1)").attr("class","lc2");
		
		// 追加样式
		// $("ul li:eq(1)").addClass("lc3");
		
		// 移除样式
		// $("ul li:eq(1)").removeClass("lc");
		
		// 设置和获取HTML,文本和值
		// 获取html
		/* var l1_html=$("ul li:eq(0)").html();
		alert(l1_html); */
		
		// 设置html
		// $("ul li:eq(0)").html("<font color=red>哈哈</font>");
		
		// 获取文本
		/* var l1_text=$("ul li:eq(0)").text();
		alert(l1_text); */
		
		// 设置文本
		// $("ul li:eq(0)").text("呵呵");
		
		// 遍历节点
		// children()
		/* var b=$("body").children();
		alert(b.length);
		var u=$("ul").children();
		alert(u.length);
		for(var i=0;i<u.length;i++){
             //u[i]原生的dom节点 
			// alert(u[i].innerHTML);
			alert($(u[i]).html());
		} */
		
		// next() 临近的下一个兄弟节点
		/* var l=$("ul li:eq(1)").next();
		alert(l.html()); */
		
		// prev() 上一个dom节点
		/* var l=$("ul li:eq(1)").prev();
		alert(l.html()); */
		
		// CSS-DOM操作
		// 获取css样式
		/* var c=$("#jq").css("color");
		alert(c); */
		
		// 设置css样式
		$("#jq").css("color","blue");
	});
	
	<ul>
	<li title="这是乔布斯"><font color="green">乔布斯</font></li>
	<li title="这是比尔盖茨" class="lc">比尔盖茨</li>
	<li title="这是詹姆斯高斯林">詹姆斯高斯林</li>
    </ul>

具体使用:

jQuery 添加新内容有以下四个方法:

  • append() - 在被选元素的结尾插入内容

  • prepend() - 在被选元素的开头插入内容

  • after() - 在被选元素之后插入内容

  • before() - 在被选元素之前插入内容

append() 方法在被选元素的结尾插入内容(仍然该元素的内部)。

创建dom节点

var li1=$("<li title='这是马化腾'>马化腾</li>");
		var li2=$("<li title='这是李彦宏'>李彦宏</li>");
		var li22=$("ul li:eq(1)");
		$("ul").append(li1);
		li2.insertAfter(li22);

删除节点
		// $("ul li:eq(1)").remove();
删除属性
		// $("ul li:eq(1)").removeAttr("title");

<script>
$(document).ready(function(){
  $("#btn1").click(function(){
    $("p").append(" <b>追加文本</b>。");
  });

  $("#btn2").click(function(){
    $("ol").append("<li>追加列表项</li>");
  });
});
</script>
</head>

<body>
<p>这是一个段落。</p>
<p>这是另外一个段落。</p>
<ol>

jQuery prepend() 方法在被选元素的开头插入内容。

<script>
$(document).ready(function(){
	$("#btn1").click(function(){
		$("p").prepend("<b>在开头追加文本</b>。 ");
	});
	$("#btn2").click(function(){
		$("ol").prepend("<li>在开头添加列表项</li>");
	});
});
</script>
</head>
<body>
	
<p>这是一个段落。</p>
<p>这是另外一个段落。</p>
<ol>
<li>列表 1</li>
<li>列表 2</li>
<li>列表 3</li>
</ol>
<button id="btn1">添加文本</button>
<button id="btn2">添加列表项</button>
	
</body>

我们只在被选元素的开头/结尾插入文本/HTML。append() 和 prepend() 方法能够通过参数接收无限数量的新元素。可以通过 jQuery 来生成文本/HTML(就像上面的例子那样),或者通过 JavaScript 代码和 DOM 元素。

<script>
function appendText(){
	var txt1="<p>文本。</p>";              // 使用 HTML 标签创建文本
	var txt2=$("<p></p>").text("文本。");  // 使用 jQuery 创建文本
	var txt3=document.createElement("p");
	txt3.innerHTML="文本。";               // 使用 DOM 创建文本 text with DOM
	$("body").append(txt1,txt2,txt3);        // 追加新元素
}
</script>
</head>
<body>

<p>这是一个段落。</p>
<button onclick="appendText()">追加文本</button>

</body>

jQuery after() 方法在被选元素之后插入内容。

jQuery before() 方法在被选元素之前插入内容。

<script>
$(document).ready(function(){
  $("#btn1").click(function(){
    $("img").before("<b>之前</b>");
  });

  $("#btn2").click(function(){
    $("img").after("<i>之后</i>");
  });
});
</script>
</head>

<body>
<img src="/images/logo.png" >
<br><br>
<button id="btn1">之前插入</button>
<button id="btn2">之后插入</button>
</body>

after() 和 before() 方法能够通过参数接收无限数量的新元素。可以通过 text/HTML、jQuery 或者 JavaScript/DOM 来创建新元素。

在下面的例子中,我们创建若干新元素。这些元素可以通过 text/HTML、jQuery 或者 JavaScript/DOM 来创建。然后我们通过 after() 方法把这些新元素插到文本中(对 before() 同样有效):

<script>
function afterText(){
	var txt1="<b>I </b>";                    // 使用 HTML 创建元素
	var txt2=$("<i></i>").text("love ");     // 使用 jQuery 创建元素
	var txt3=document.createElement("big");  // 使用 DOM 创建元素
	txt3.innerHTML="jQuery!";
	$("img").after(txt1,txt2,txt3);          // 在图片后添加文本
}
</script>
</head>
<body>

<img src="/images/logo2.png" >
<br><br>
<button onclick="afterText()">之后插入</button>

</body>

append/prepend和after/before有什么区别呢

append/prepend 是在选择元素内部嵌入。

after/before 是在元素外面追加。

append

<p>
  <span class="s1">s1</span>
</p>
<script>
$("p").append('<span class="s2">s2</span>');
</script>
--------------------------------------------
<p>
  <span class="s1">s1</span>
  <span class="s2">s2</span>
</p>

after

<p>
  <span class="s1">s1</span>
</p>
<script>
$("p").after('<span class="s2">s2</span>');
</script>
-------------------------------------------
<p>
  <span class="s1">s1</span>
</p>
<span class="s2">s2</span>
              //初始化字典数据
                $Core.DicCache.initDictionary("installdevName,customerType,publicserviceName,userdevState", function () {  
                		var approveState = data.data.approveState;
                		var appendRow = "";
                		if("0"!=approveState&&"1"!=approveState&&""!=approveState){
                			appendRow ="<tr align='center' id='appendRow'> <td   width= '16% ' colspan='3'>"+data.data.approveUserName+
                    		"</td><td  id='stateu' width= '16% ' colspan='3'>"+$Core.DicCache.get("userdevState")[approveState]+
                    		"</td><td   width= '16% ' colspan='3'>"+data.data.approveAdvice+
                    		"</td> <td   width= '20% ' colspan='3'>"+data.data.approveTime+
                    		"</td></tr>"
                    		$("#newRow").after(appendRow);
                			if("4"==approveState||"5"==approveState){
                				var appendRowT = "<tr align='center'> <td   width= '16% ' colspan='3'>"+data.data.approvePersonNameSecond+
                        		"</td><td   width= '16% ' colspan='3'>"+$Core.DicCache.get("userdevState")[approveState]+
                        		"</td><td   width= '16% ' colspan='3'>"+data.data.approveAdviceSecond+
                        		"</td> <td   width= '20% ' colspan='3'>"+data.data.approveTimeSecond+
                        		"</td></tr>"
                				$("#appendRow").after(appendRowT);
                				$("#stateu").html("审批通过");
                			}
                		}
                });

序列生成

    <table cellspacing="0" cellpadding="0" id="col">
      <tr id="newRow">
        <td width="20" class="tit">序号</td>
        <td width="160" class="tit">验收项目名称</td>
        <td width="120" class="tit">生产厂家</td>
      </tr>
      <tr>
        <td>1</td>
        <td>气化器</td>
        <td></td>
      </tr>
 </table>
                 	var oTable = $("#col");
                 	for(var i=1,a=0;i<oTable[0].rows.length;i++){  
                        oTable[0].rows[i].cells[0].innerHTML = (++a);  
                    }  
                 	var dictionaryItems = oTable[0].rows[oTable[0].rows.length-1];
                 	dictionaryItems.id="dicItem";

appendTo()

方法在被选元素的结尾(仍然在内部)插入指定内容。

   var $li = $('#' + file.id),
                        $percent = $li.find('.progress span');
                    //console.log("percentage:", percentage);
                    // 避免重复创建
                    if (!$percent.length) {
                        $percent = $('<p class="progress"><span></span></p>')
                            .appendTo($li)
                            .find('span');
                    }

$( "input" ).focus(function() {
  $( "<span>获取焦点!</span>" ).appendTo( "body" ).fadeOut( 1000 );
});

 

简单的省市二级联动与三级联动

遍历Json对象

给dom节点增加数据 options  new Option(text,id)固定格式前面文本后面id

        shi.options.length=0;重置市  
            var dataObj=eval("("+xmlHttp.responseText+")");
				for(var i=0;i<dataObj.rows.length;i++){
					var o=dataObj.rows[i];
					shi.options.add(new Option(o.text,o.id));
				}

省:
<select id="sheng" onchange="loadInfo()">
	<option value="1">江苏省</option>
	<option value="2">山东省</option>
	<option value="3">浙江省</option>
</select>
&nbsp;&nbsp;
市
<select id="shi">
</select>

//
</body>后台
		PrintWriter out=response.getWriter();
		String shengId=request.getParameter("shengId");
		JSONObject resultJson=new JSONObject();
		JSONArray jsonArray=new JSONArray();
		JSONObject temp=null;
		switch(Integer.parseInt(shengId)){
			case 1:{
				temp=new JSONObject();temp.put("id", 1);temp.put("text", "南京");jsonArray.add(temp);
				temp=new JSONObject();temp.put("id", 2);temp.put("text", "南通");jsonArray.add(temp);
				temp=new JSONObject();temp.put("id", 3);temp.put("text", "泰兴");jsonArray.add(temp);
				break;
			}
			case 2:{
				temp=new JSONObject();temp.put("id", 4);temp.put("text", "济南");jsonArray.add(temp);
				temp=new JSONObject();temp.put("id", 5);temp.put("text", "烟台");jsonArray.add(temp);
				temp=new JSONObject();temp.put("id", 6);temp.put("text", "蓬莱");jsonArray.add(temp);
				break;
			}
			case 3:{
				temp=new JSONObject();temp.put("id", 7);temp.put("text", "杭州");jsonArray.add(temp);
				temp=new JSONObject();temp.put("id", 8);temp.put("text", "宁波");jsonArray.add(temp);
				temp=new JSONObject();temp.put("id", 9);temp.put("text", "温州");jsonArray.add(temp);
				break;
			}
		}
		resultJson.put("rows", jsonArray);
		out.println(resultJson);
		out.flush();
		out.close();
	}

三级联动

	<script type="text/javascript">
	<!--
		var arr = ["中国","美国","日本"] ;
		  
		  arr["中国"] = ["北京","上海","钓鱼岛"] ;
		  arr["美国"] = ["纽约","华盛顿","旧金山"] ;
		  arr["日本"] = ["东京","大阪","神户"] ;
		
		  arr["北京"] = ["海淀","朝阳","昌平","丰台"] ;
		  arr["上海"] = ["浦东","金山","崇明","浦西"] ;
		  arr["钓鱼岛"] = ["钓鱼岛东","钓鱼岛南","钓鱼岛西","钓鱼岛北"] ;

		  arr["纽约"] = ["纽约1","纽约2","纽约3","纽约4"] ;
		  arr["华盛顿"] = ["华盛顿1","华盛顿2","华盛顿3","华盛顿4"] ;
		  arr["旧金山"] = ["旧金山1","旧金山2","旧金山3","旧金山4"] ;

		  arr["东京"] = ["东京1","东京2","东京3","东京4"] ;
		  arr["大阪"] = ["大阪1","大阪2","大阪3","大阪4"] ;
		  arr["神户"] = ["神户1","神户2","神户3","神户4"] ;

		  function init(){
			  //填充国家
			  fillData(arr,"country") ;

			   //填充省市
			  fillData(arr[arr[0]],"province") ;
			    //填充地区
			  fillData(arr[arr[arr[0]][0]],"area") ;
		  }

		  function fillData(arr,id){
			    //清空select选项
			  document.getElementById(id).options.length = 0 ;
			  //添加选项
			  for(var i = 0 ;i<arr.length ;i++){
				  //创建一个option对象
				  //第一种
				 /* var option = new Option() ;
				  option.text = arr[i] ;
				  option.value = arr[i] ;*/

				  //第二种
				  var option = new Option(arr[i],arr[i]) ;

				  //将option对象添加到select中
				  document.getElementById(id).options.add(option) ;
			  }
		  }

		  function changePro(coun){
			
			  //添加省市
			  fillData(arr[coun],"province") ;

			  //添加地区
			  fillData(arr[arr[coun][0]],"area") ;
		  }

		  function changeArea(pro){
			//改变地区
			fillData(arr[pro],"area") ;
		  }
	//-->
	</script>
 <body onload = "init()">
	 国家:<select id = "country" onchange = "changePro(this.value)"></select>
	 省市:<select id = "province" onchange = "changeArea(this.value)"></select>
	 地区:<select id = "area"></select>
 </body>

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wespten

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值