
批改狀態(tài):合格
老師批語:更多的dom原生操作可以查手冊, MDN,或者閱讀:JavaScript權(quán)威指南, JavaScript高級程序設(shè)計
DOM參考手冊:
https://developer.mozilla.org/zh-CN/docs/Web/API/Document_Object_Model
一:節(jié)點相關(guān)知識:
1、節(jié)點時DOM樹種的最小單元:節(jié)點是有類型的:元素、文本、文檔、注釋、片段等
2、document
:(window.document
)獲取文檔;定義的快速入口:
document.doctype
:獲得文檔類型document.documentElement
:獲取文檔種的根節(jié)點document.head
:獲取head節(jié)點document.body
:獲取body節(jié)點document.title
:獲取head中的title節(jié)點document.links
:獲取a鏈接的節(jié)點;二、獲取頁面元素的方式:
1、標(biāo)簽名:返回一個html對象集合:
document.getElementsByTagName()
item(n)
2、ID:返回一個對象
document.getElementById(id)
替代語法:用標(biāo)簽名訪問返回對象集合在用namedItem(id)
訪問,namedItem()也可以訪問name屬性來返回;getElementsByTagName()
和getElementById()
3、class:返回一個html集合,類數(shù)組
getElementsByClassName()
item(n)
4、直接使用css選擇器來獲取元素:
query.Selector()
返回匹配選擇器的第一個元素 和 query.SelectorAll()
返回所有匹配選擇器的元素集合NodeList;三、元素的類型和節(jié)點的屬性
1、頁面返回二種類型的集合:HTMLCollection,NodeList;
2、Node節(jié)點(元素節(jié)點、屬性、文本節(jié)點)對象有三個非常重要的屬性:nodeName,nodeType,nodeValue(只有文本節(jié)點時,這個屬性才有意義);
3、childnodes:返回值種包括了所有類型的節(jié)點(Tips:換行符會當(dāng)成文本節(jié)點)
4、firstChild:第一個子節(jié)點;lastChild:最后一個子節(jié)點;childElementCount:統(tǒng)計html標(biāo)簽元素的數(shù)量;children:返回html標(biāo)簽元素的集合
5、Array.from():將類數(shù)組轉(zhuǎn)為真正的數(shù)組對象
6、firstElemetChild:獲取第一個子元素;lastElementChild:獲取最后一個子元素;
children.item():獲取任何一個子元素:也可以用索引訪問
7、訪問父節(jié)點:parentNode;訪問父元素parentElement;
四、元素的添加和刪除:
1、元素的添加步驟:
var h2=createElement('h1');
h2.innerHTML='我是元素內(nèi)容';
document.body.appendChild(h2);
2、利用片段優(yōu)化添加多個元素:
var frag=document.createDocumentFragment();
frag.appendChild(li);
(tips:片段(掛載點)可以接受多個元素)3、添加掛載點到文檔中(父節(jié)點中);ul.appendChild(frag);
五、事件
1、html標(biāo)簽屬性:onclick="alert()"
點擊觸發(fā)彈窗;
2、事件監(jiān)聽函數(shù):addEventListener(時間名稱自付串,事件的回調(diào)函數(shù),false(觸發(fā)模式:冒泡))
;
擴充:ev.type:事件的行為;ev.target:獲取發(fā)生事件的對象
3、禁用點擊后ev的默認(rèn)事件:ev.preventDefault();
4、獲取焦點:focus();去除首位空格:trim();length:長度屬性;
5、insertBefore(要插入的元素,要插入元素的位置:那個元素之前);
6、this.event.preventDefault();
禁用當(dāng)前事件的默認(rèn)行為;
7、removeChild();
移除函數(shù);
8、confirm():獲取(彈窗提示確認(rèn)和取消)的函數(shù);確認(rèn)返回true,取消返回false;
一、代碼練習(xí):
1.1代碼:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>DOM對象</title>
</head>
<body>
<div id="list">
<ul class="poster">
<li name="active">戰(zhàn)勝疫情, 指日可待</li>
<li>全民動員, 支持國家</li>
<li>我宅家,我驕傲,我為國家省口罩</li>
</ul>
</div>
<script>
console.log(document);
console.log(window.document);
console.log(document.doctype);
console.log(document.documentElement);
console.log(document.head);
console.log(document.body);
console.log(document.title);
console.log('獲取頁面元素…………………………………………')
var ul=document.getElementsByTagName('li');
console.log(ul);
console.log(ul[1]);
console.log(ul.item(2));
var div=document.getElementById('list');
console.log(div);
// console.log(document.namedItem('list'));這是無法訪問的
var div= document.getElementsByTagName('div');
console.log(div);
console.log(div.namedItem('list'));
var cla=document.getElementsByClassName('poster');
console.log(cla);
console.log(cla.item(0));
var div = document.querySelector('#list');
console.log(div);
var lis=document.querySelectorAll('#list>.poster>li');
console.log(lis);
console.log(lis[2]);
console.log(lis.item(1));
console.log("^^^^^^^^^^^^^^^^^^")
Array.from(lis).forEach(item=>console.log(item));
Array.from(lis).forEach(function(item){console.log(item)});
lis.forEach(function(item){console.log(item)});
</script>
</body>
</html>
1.2運行結(jié)果圖:
2.1代碼:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<div id="box">
<h2>JavaScript</h2>
<p>通用前端腳本語言</p>
<li>學(xué)習(xí)讓我感到很充實</li>
</div>
<p><a href="http://ipnx.cn">PHP中文網(wǎng)</a></p>
<script>
var link=document.links;
console.log(link);
console.log(link.item(0));
var a=link.item(0);
console.log(a.nodeName);
console.log(a.nodeType);
console.log(a.nodeValue);
console.log(a);
console.log(a.firstChild.nodeValue);
var div = document.querySelector('div');
console.log(div);
console.log('^^^^^^^^^^^^^^^^^^^^^^^^')
div1=div.childNodes;
console.log(div.childElementCount);
console.log(div1.length);
console.log(div1);
Array.from(div1).forEach(item=>console.log(item));
div2=div.children;
console.log(div2);
Array.from(div2).forEach(item=>console.log(item));
console.log(div.firstElementChild);
console.log(div.lastElementChild);
console.log(div.children.item(1));
console.log('……………………………………………………………………')
var li=document.getElementsByTagName('li');
console.log(li.item(0));
console.log('父級元素/父級節(jié)點')
console.log(li.item(0).parentElement);
console.log(li.item(0).parentNode);
</script>
</body>
</html>
2.2運行結(jié)果圖
3.1代碼:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<button onclick="alert(this.firstChild.nodeValue)">點擊我</button>
<button>點我試試看</button>
<a href="">PHP中文網(wǎng)</a>
<script>
var ul=document.createElement('ul');
// h1.innerHTML='你好';
document.body.appendChild(ul);
// var ul = document.querySelector('ul');
// console.log(ul);
var frag=document.createDocumentFragment();
for(var i=0;i<5;i++){
var li = document.createElement('li');
li.innerText='列表項'+(i+1);
// console.log(li)
frag.appendChild(li);
}
ul.appendChild(frag);
var btn=document.querySelectorAll('button').item(1);
// console.log(btn);
btn.addEventListener('mouseover',function(ev){
// console.log(ev.target);
// console.log(ev.type);
ev.target.style = 'width:100px;height:50;background: lightgreen;border:none;outline: none;'
},false);
btn.addEventListener('mouseout',function(ev){
// console.log(ev.target);
// console.log(ev.type);
ev.target.style = 'none'
},false);
var link=document.links.item(0);
link.onclick=function(cc){
cc.preventDefault();
btn.style.display='none';
}
</script>
</body>
</html>
3.2運行結(jié)果:
1、ToDoList案例
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>ToDoList</title>
</head>
<body>
<form action="" name="comment" method="post">
<label for="content">請留言:</label>
<input type="text" name="content">
<button>提交</button>
</form>
<ul>
</ul>
<script>
// 獲取表單和ul
var form=document.forms.namedItem('comment');
var ul=document.querySelector('ul');
// 監(jiān)聽submit提交事件,
addEventListener('submit',function(ev){
ev.preventDefault();
var li=document.createElement('li');
// li.innerHTML=form.content.value;
// ul.appendChild(li);
// 判斷留言是否為空,空則不能添加
if(form.content.value.trim().length===0){
alert('留言不能為空');
form.content.focus();
}else{
li.innerHTML=form.content.value+'<a href="" onclick="del(this)">刪除</a>';
// 判斷ul是否有元素、分別處理
if(ul.childElementCount===0){
// 無元素直接插入
ul.appendChild(li);
}else{
// 有元素插入到第一個元素前面
ul.insertBefore(li,ul.firstElementChild);
}
}
// 清空留言并獲取焦點
form.content.value='';
form.content.focus();
},false);
function del(str){
this.event.preventDefault();
return confirm('是否刪除?') ? ul.removeChild(str.parentElement):false;
}
</script>
</body>
</html>
2、運行結(jié)果:
微信掃碼
關(guān)注PHP中文網(wǎng)服務(wù)號
QQ掃碼
加入技術(shù)交流群
Copyright 2014-2025 http://ipnx.cn/ All Rights Reserved | php.cn | 湘ICP備2023035733號