1.案例一:在末尾添加节点
第一步:获取到 ul 标签
第二步:创建 li 标签
document.createElement(“标签名称”)方法
第三步:创建文本
document.createTextNode(“文本内容”);
第四步:把文本添加到 li 下面
使用 appendChild 方法
第五步:给 li 添加 ul 末尾
使用 appendChild 方法
代码实现:
<body>
<ul id="ulid">
<li>111</li>
<li>111</li>
<li>111</li>
<li>111</li>
</ul>
<input type="button" value="add" onclick="add();"/> //点击按钮
<script type="text/javascript">
function add(){ //末尾添加节点的方法
var ul1=document.getElementById("ulid"); //获取到 ul 元素
var li1=document.createElement("li"); 创建一个 li 标签
var text1=document.createTextNode("666"); 创建添加的文本
li1.appendChild(text1); //把文本添加 li 标签里
ul1.appendChild(li1);//把 li 标签添加到 ul 里
}
</script>
</body>
2.元素对象(element 对象)
要操作 element 对象,首先必须要获取到 element
——使用 document 里面相应的方法获取
方法:
- 获取属性里面的值
getAttribute(“属性名称”)
<input type="text" name="name1" id="inputid" value="aaa"/>
var input1=document.getElementById(“inputid”);
alert(input1.value); //弹出 aaa
alert(input1.getAttribute(“value”)); //弹出 aaa
- 设置属性的值
input1.setAttribute(“class”,“haha”);
- 删除属性值
input1.removeAttribute(“name”);
不能删除 value 值
2.想要获取标签下面的子标签
使用属性 childNodes,但是这个属性兼容性很差
获得标签下面子标签的唯一有效方法,使用 getElementByTagName 方法
<ul id="ulid1">
<li>aaa</li>
<li>bbb</li>
<li>ccc</li>
</ul>
var uli1=document.getElementById(“ulid1”);
var lis=uli1.getElementsTagName(“li”);
alert(lis.length);//3
3.Node 对象属性一
NodeName
nodeType
nodeValue
使用 dom 解析 html 时,需要 html 里面的标签,属性和文本都封装成对象
标签节点对应的值
nodeType:1
NodeName:大写标签名称 比如 SPAN
nodeValue:null
属性节点对应的值
nodeType:2
NodeName:属性名称
nodeValue:属性的值
文本节点对应的值
nodeType:3
NodeName:#text
nodeValue:文本内容
4.Node 对象的属性二
<ul id="ulid">
<li id="li1">qqq</li>
<li id="li2">www</li>
<li id="li3">www</li>
<li id="li4">www</li>
</ul>
- 父节点
ul 是 li 的父节点
parentNode
var li1=document.getElementById("li1");
var ul1=li1.parentNode;
alert(ul1.id);//ulid
- 子节点
li 是 ul 的子节点
childNodes :得到所有子节点,但是兼容性很差
firstchild:获取第一个子节点
var ul1=document.getElementById(“ulid”);
var li1=ul1.firstchild;
alert(li1.id);//li1
lastchild:获取最后一个子节点
var ul1=document.getElementById(“ulid”);
var li4=ul1.lastchild;
alert(li4.id);//li4
- 同辈节点
li 直接关系是同辈节点
nextSibing:返回一个给定节点的下一个兄弟节点
previousSibling:返回一个给定节点的上一个兄弟节点
5.操作 DOM 树一
- appendchild方法
添加子节点到末尾
特点:类似于剪贴粘贴效果
代码展示 :
<body>
<style type="text/css">
#div1{
width: 200px;
height: 150px;
border: 1px solid goldenrod;
}
#div2{
margin-top: 10px;
width: 200px;
height: 250px;
border: 1px solid green;
}
</style>
<div id="div1">
<ul id="ul1">
<li>tom</li>
<li>mary</li>
<li>jack</li>
</ul>
</div>
<div id="div2">
</div>
<input type="button" value="add1" onclick="add1()"/>
<script type="text/javascript">
function add1(){
var div2=document.getElementById("div2");//获取 div2 标签
var ul1=document.getElementById("ul1"); //获取 ul 标签
div2.appendChild(ul1); //把 ul 放到 div2 标签里面
}
</script>
</body>
原图:
点击 add1 之后:
- insertBefore(newNode,oldNode)方法
在某个节点之前插入一个新节点
两个参数:
要插入的节点
在谁之前插入
插入 一个节点,节点不存在,创建:
1.创建标签
2.创建文本
3.把文本添加到标签下面
代码展示:
<body>
<ul id="ul1">
<li id="li1">tom</li>
<li id="li2">mary</li>
<li id="li3">jack</li>
<li id="li4">aaaa</li>
</ul>
<input type="button" value="add1" onclick="insert()"/>
<script type="text/javascript">
function insert(){
var li2=document.getElementById("li3"); //获取要插入的标签
var li5=document.createElement("li"); //创建插入的标签
var text5=document.createTextNode("cccc"); //创建插入文本
li5.appendChild(text5); //把文本添加到 li 标签上
var ul=document.getElementById("ul1"); //获取 ul 标签
ul.insertBefore(li5,li3); //在 li3 前面添加 li5
}
</script>
</body>
添加后的效果:
不存在 没有 insertAfter()方法
6.操作 DOM 树二
- removeChild方法:删除节点
通过父节点删除,不能自己删除自己
<body>
<ul id="ul1">
<li id="li1">tom</li>
<li id="li2">mary</li>
<li id="li3">jack</li>
<li id="li4">aaaa</li>
</ul>
<input type="button" value="remove" onclick="remove()"/>
<script type="text/javascript">
function remove(){
var li3=document.getElementById("li3"); //获取删除的标签
var ul=document.getElementById("ul1"); //获取 ul 标签
ul.removeChild(li3); //删除标签
}
</script>
</body>
- replaceChild (newNode,oldNode)发法:替换节点
不能自己替换自己,通过父节点替换
两个参数
第一个参数:新的节点(替换成的节点)
第二个参数:旧的节点(被替换的节点)
代码展示:
<body>
<ul id="ul1">
<li id="li1">tom</li>
<li id="li2">mary</li>
<li id="li3">jack</li>
<li id="li4">aaaa</li>
</ul>
<input type="button" value="replace" onclick="replace()"/>
<script type="text/javascript">
function replace(){
var li3=document.getElementById("li3");
var li5=document.createElement("li");
var text5=document.createTextNode("aiaiaiaiai");
li5.appendChild(text5);
var ul=document.getElementById("ul1");
ul.replaceChild(li5,li3);
}
</script>
</body>
点 替换之前:
点替换之后:
- cloneNode(boolean):复制节点
把 ul 列表复制到另一个 div 里面
代码展示:
<body>
<style type="text/css">
#div1 {
width: 200px;
height: 150px;
border: 1px solid goldenrod;
}
#div2 {
margin-top: 10px;
width: 200px;
height: 250px;
border: 1px solid green;
}
</style>
<div id="div1">
<ul id="ul1">
<li>tom</li>
<li>mary</li>
<li>jack</li>
</ul>
</div>
<div id="div2">
</div>
<input type="button" value="copy" onclick="copy()"/>
<script type="text/javascript">
function copy(){
var ul=document.getElementById("ul1"); //获取 ul 标签
var copy=ul1.cloneNode(true); //把 ul 标签里面的内容复制到 copy 里
var div=document.getElementById("div2"); //获取 div
div.appendChild(copy); //把复制的内容放到新的 div 里面
}
</script>
</body>
复制之前:
点击 copy 两遍之后:
操作 DOM 总结
- 获取节点使用方法
getElementById():通过节点的 id 属性,查找对应节点
getElementsByName():通过节点的 name 属性,查找对应的节点 - 插入节点的方法
insertBefore():在某个节点之前插入
appendChild():在末尾添加,剪贴黏贴 - 删除节点的方法
removeChild():通过父节点删除 - 替换节点方法
replaceChild():通过父节点替换
6.innerHTML 属性
这个属性不是 dom 的组成部分,但是大多数浏览器都支持的属性
第一个作用:获取文本内容
<span id="sid" >aaaa</span>
var span1=document.getElementById(“sid”);
alert(span1.innerHTML);//aaaa
第二个作用:向标签里面设置内容(可以是 html 代码)
向 div 里面设置内容<h1>AAAA</h1>
var div1=document.getElementById(“div1”);
div1.innerHTML="<h1>AAAA</h1>"
练习:向 div 里面添加一个表格
var tab="<table border='1'><tr><td>aaaaa</td></tr><tr><td>bbbbb</td></tr><tr><td>ccccc</td></tr><table>
//或者
var tab="<table>";
tab+="</table>; //相当于 var tab="<table></table>";
div1.innerHTML=tab;
7.动态显示时间
1.得到当前的时间
2.需要让页面每一秒获取时间
3.显示到页面上
代码:
<body>
<div id="div1">
</div>
<script type="text/javascript">
function getD1(){
var date=new Date(); //获取当前时间
var d1=date.toLocaleString();//显示出自己想要的效果
var div=document.getElementById("div1");
div.innerHTML=d1; //放获取到的时间显示到页面上
}
setInterval("getD1();",1000); //每一秒调用一下 getD1() 方法
</script>
</body>
8.案例:全选练习
复选框 <input type="checkbox" />
属性:checked=true 已选择 checked=false 未选择
创建一个页面
- 复选框和按钮
四个复选框表示爱好
还有一个复选框操作 全选和全不选,也有一个事件 - 三个按钮,分别有事件
全选
全不选
反选
代码:
<body>
<input type="checkbox" id="boxid" onclick="selAllNo()"/>全选/全不选
<br/>
<input type="checkbox" name="love"/>篮球<br>
<input type="checkbox" name="love" />排球<br>
<input type="checkbox" name="love" />羽毛球<br>
<input type="checkbox" name="love" />乒乓球<br>
<br>
<input type="button" value="全选" onclick="selall()"/>
<input type="button" value="全不选" onclick="selno()" />
<input type="button" value="反选" onclick="selother()" />
<script type="text/javascript">
//全选/全不选
function selAllNo() {
var box=document.getElementById("boxid");
if(box.checked==true){
selall();
}
else{
selno();
}
}
//全选
function selall(){
var loves=document.getElementsByName("love");
for(var i=0;i<loves.length;i++){
loves[i].checked=true;
}
}
//全不选
function selno() {
var loves = document.getElementsByName("love");
for (var i = 0; i < loves.length; i++) {
loves[i].checked = false;
}
}
//反选
function selother() {
var loves = document.getElementsByName("love");
for (var i = 0; i < loves.length; i++) {
if(loves[i].checked ==true){
loves[i].checked =false;
}
else{
loves[i].checked =true;
}
}
}
</script>
</body>
效果展示:
9.案例:下拉列表左右选择
下拉选择框
<select>
<option>111</option>
<option>111</option>
</select>
- 创建一个页面
两个下拉选择框
——设置属性 multiple 属性 ( 没有下拉线,全部展示)
四个按钮,有事件.
获取子标签的唯一方法
<select id="select1" multiple="multiple" style="width: 100px;height: 100px;">
<option>AAAAAA</option>
<option>BBBBBB</option>
<option>CCCCCC</option>
<option>DDDDDD</option>
<option>EEEEEE</option>
</select>
var select1 = document.getElementById("select1");
var options = select2.getElementsByTagName("option");
代码展示:
<body>
<div>
<select id="select1" multiple="multiple" style="width: 100px;height: 100px;">
<option>AAAAAA</option>
<option>BBBBBB</option>
<option>CCCCCC</option>
<option>DDDDDD</option>
<option>EEEEEE</option>
</select>
<br><br>
<input type="button" value="选中添加到右边" onclick="seltoright()" /><br>
<input type="button" value="全部添加到右边" onclick="alltoright()"/>
</div>
<div style="margin-left: 140px;;margin-top: -164px">
<select id="select2" multiple="multiple" style="width: 100px; height:100px;">
<option>QQQQQQ</option>
</select>
<br><br>
<input type="button" value="选中添加到左边" onclick="seltoleft()" /><br>
<input type="button" value="全部添加到左边" onclick="alltoleft()" />
</div>
<script text="text/javascript">
//部分添加到右边
function seltoright(){
var select2=document.getElementById("select2");
var select1=document.getElementById("select1");
var options=select1.getElementsByTagName("option");
for(var i=0;i<options.length;i++){
if(options[i].selected==true){
select2.appendChild(options[i]);
i--;
}
}
}
//全部添加到右边
function alltoright() {
var select2 = document.getElementById("select2");
var select1 = document.getElementById("select1");
var options = select1.getElementsByTagName("option");
for (var i = 0; i < options.length; i++) {
select2.appendChild(options[i]);
i--;
}
}
//选中添加到左边
function seltoleft() {
var select2 = document.getElementById("select2");
var select1 = document.getElementById("select1");
var options = select2.getElementsByTagName("option");
for (var i = 0; i < options.length; i++) {
if (options[i].selected == true) {
select1.appendChild(options[i]);
i--;
}
}
}
//全部添加到左边
function alltoleft() {
var select2 = document.getElementById("select2");
var select1 = document.getElementById("select1");
var options = select2.getElementsByTagName("option");
for (var i = 0; i < options.length; i++) {
select1.appendChild(options[i]);
i--;
}
}
</script>
</body>
效果展示:
10.案例:省市联动
- 创建一个页面,有两个下拉选项框
- 在第一个下拉框里面有一个事件:改变事件 onchange 事件
方法 add1(this.value);表示当前改变的 option 里面的 value值- 创建一个二维数组,存储数据
代码展示:
<body>
<select id="country" onchange="add1(this.value);">
<option value="0">---请选择---</option>
<option value="中国">中国</option>
<option value="美国">美国</option>
<option value="德国">德国</option>
<option value="日本">日本</option>
</select>
<select id="city">
</select>
<script text="text/javascript">
var arr=new Array(4); //二维数组:数组里面再套一个数组
arr[0] = ["中国","南京","宝鸡","西安","上海","北京"];
arr[1] = ["美国", "花盛顿", "底特律", "休斯顿", "纽约"];
arr[2] = ["德国", "慕尼黑", "柏林", "法兰克福", "狼堡"];
arr[3] = ["日本", "东京", "北海道", "大扳", "广岛", "长崎"];
function add1(val){
var city1=document.getElementById("city");
//每次在 city 里面添加都会叠加,所以每次添加之前要判断是否为空
var options1=city1.getElementsByTagName("option");
for(var i=0;i<options1.length;i++){
city1.removeChild(options1[i]);
i--;
}
//city 添加元素
for(var i=0;i<arr.length;i++){
var arr1=arr[i];
var firstval=arr1[0];
if(firstval==val){
for(var j=1;j<arr1.length;j++){
var option1=document.createElement("option");
var text1=document.createTextNode(arr1[j]);
option1.appendChild(text1);
city1.appendChild(option1);
}
}
}
}
</Script>
</body>
效果展示:
11.案例:生成动态表格
创建一个页面,两个输入框和一个按钮
代码展示:
<body>
行:<input type="text" id="hang" />
列:<input type="text" id="lie" /><br>
<input type="button" value="生成" onclick="add2();" />
<div id="divv">
</div>
<script type="text/javascript" />
function add2() {
var h=document.getElementById("hang").value;
var l=document.getElementById("lie").value;
//自动添加行和列
var tab="<table border='1' bordercolor='blue'>";
for(var i=0;i<h;i++){
tab+="<tr>";
for(var j=0;j<l;j++){
tab+="<td>aaaaaa</td>";
}
tab+="</tr>";
}
tab+="</table>";
document.getElementById("divv").innerHTML=tab;
}
</script>
</body>
效果展示: