在 HTML DOM 中,Element 对象表示 HTML 元素。
Element 对象可以拥有类型为元素节点、文本节点、注释节点的子节点。
NodeList 对象表示节点列表,比如 HTML 元素的子节点集合。
元素也可以拥
nodeType 判断节点类型
1 元素节点 2 属性节点 3 文本节点
<!-- nodeType 判断一个节点的类型
1 元素节点
3 文本节点
2 属性节点
-->
<!--
getAttributeNode() 获取属性节点
firtChild获取第一个子节点
-->
<p id="app">hello world</p>
<script>
var app = document.getElementById("app");
var id = app.getAttributeNode("id");
console.log(app.nodeType)
console.log(app.firstChild.nodeType)
console.log(id.nodeType)
</script>
childNodes—所有的子节点 children—只会获取元素节点
<ul id="app">
<li>hello world</li>
<li>hello world</li>
<li>hello world</li>
<li>hello world</li>
</ul>
<script>
// childNodes--包含所有的子节点(不管文本还是元素都包含)
// children --只会获取子节点
var app = document.getElementById("app");
var childs = app.childNodes;
var children = app.children;
console.log(childs)
console.log(children)
</script>
push 添加数组元素
<script>
var arr = ["html","css"];
// push
arr.push("js");
console.log(arr);
</script>
nodeType,push 获取所有的元素节点
<ul id="app">
<li>hello world</li>
<li>hello world</li>
<li>hello world</li>
<li>hello world</li>
</ul>
<script>
// 获取所有的元素节点
var app = document.getElementById("app");
var childs = app.childNodes;
var arr = [];
for(var i=0;i<childs.length;i++){
if(childs[i].nodeType == 1){
arr.push(childs[i])
console.log(i)
}
// console.log(i)
}
console.log(arr);
</script>
添加节点 createElement,createTextNode
appendChild() 方法向节点添加最后一个子节点
<!-- 增加节点
createElement();
createTextNode();
appendChild();
-->
<div id="app">
<div>
hello world</div>
</div>
</div>
<script>
var app = document.getElementById("app");
var p = document.createElement("p");
var txt = document.createTextNode("hello world");
p.appendChild(txt);
app.appendChild(p);
</script>
innerHTML,insertBefore()
innerHTML 属性:设置或返回表格行的开始和结束标签之间的 HTML。 insertBefore() :方法在您指定的已有子节点之前插入新的子节点。
<ul id="app">
<li>html</li>
<li id="js">javascript</li>
</ul>
<script>
// 给元素添加内容innerHTML
/*
parentNode.insertBefore(newNode,targetNode)
*/
var app = document.getElementById("app");
var js = document.getElementById("js");
var li = document.createElement("li");
li.innerHTML = "vue";
app.insertBefore(li,js);
</script>
元素消失 removeChild()
<div id="app">
<div id="child">child</div>
</div>
<script>
// removeChild()让从元素DOM树,渲染树上都消失
var app = document.getElementById("app");
var child = document.getElementById("child");
app.removeChild(child);
</script>
替换元素 replaceChild()
repalceChild(newNode,targetNode)
<div id="app">
<div id="child">child</div>
</div>
<script>
var app = document.getElementById("app");
var child = document.getElementById("child");
var p = document.createElement("p");
p.innerHTML = "hello world";
app.replaceChild(p,child);
</script>
克隆节点
<div id="app">
<div class="one">
hello world
</div>
</div>
<script>
// cloneNode
var app = document.getElementById("app");
var one = document.getElementsByClassName("one")[0];
var test = one.cloneNode(true);
console.log(test);
app.appendChild(test);
</script>
element.value
输入框中内容
<input type="text" id="input" value="helloworld">
<script>
/* element.value */
var input = document.getElementById("input");
input.onkeyup = function(event){
if(event.keyCode ==13 ){
console.log(this.value)
}
}
</script>
<head>
<style>
textarea{
border:1px solid #333;
}
</style>
</head>
<body>
<p>还可以输入<em id="em" style="color:red">0</em>/30</p>
<textarea id="txt" cols="30" rows="10"></textarea>
<script>
var txt = document.getElementById("txt");
var em = document.getElementById("em")
txt.onkeydown = function(){
var length = this.value.length;
if(length<=30){
em.innerHTML = this.value.length;
}else{
alert("只能输入30个字符")
}
}
</script>
textarea字数限制(有问题)
<style>
textarea{
border:1px solid #333;
}
</style>
<body>
<p>还可以输入<em id="em" style="color:red">0</em>/30</p>
<textarea id="txt" cols="30" rows="10"></textarea>
<script>
var txt = document.getElementById("txt");
var em = document.getElementById("em")
txt.onkeydown = function(){
var length = this.value.length;
if(length<=30){
em.innerHTML =this.value.length;
}else{
alert("只能输入30个字符")
}
}
</script>
在javascript中声明的全局变量
<script>
/* 在javascript中声明的全局变量是window的属性,方法是window的方法 */
var a = 10;
function go(){
console.log("hello world")
}
// const window = {
// a:10,
// go:function(){
// console.log("hello world")
// }
// }
// console.log(window.a);
// window.go();
console.log(a);
go();
</script>
parentNode 元素的父节点
<ul>
<li>html <button>删除</button></li>
<li>css <button>删除</button></li>
<li>javascript <button>删除</button></li>
</ul>
<script>
var btns = document.getElementsByTagName("button");
for(var i=0;i<btns.length;i++){
btns[i].onclick = function(){
var temp = window.confirm("确定吗");
if(temp){
this.parentNode.style.display = "none"
}
}
}
</script>
递归 函数调用函数自身
/* 函数调用函数自身,就叫递归 */
function show(){
setTimeout(function(){
console.log(1)
show();
},1000)
}
show()