<!DOCTYPE html>
<html lang="en">
<head>
? <meta charset="UTF-8">
? <title>Leon</title>
</head>
<body>
? <table>
? ? <thead>
? ? ? <th>序號</th>
? ? ? <th>姓名</th>
? ? ? <th>年齡</th>
? ? ? <th>性別</th>
? ? ? <th>操作</th>
? ? </thead>
? ? <tbody></tbody>
? </table>
</body>
</html>
<script>
? var arr = [
? ? {name: 'Jack',age: 18,gender: '男'},
? ? {name: 'Rose',age: 20,gender: '女'},
? ? {name: 'Top',age: 22,gender: '男'},
? ? {name: 'leon',age: 32,gender: '男'},
? ? {name: 'lisi',age: 31,gender: '女'}
? ];
? bindHtml()
? // 根據(jù)數(shù)組的數(shù)據(jù)動態(tài)渲染表格函數(shù)
? function bindHtml(){
? ? // 獲取tbody標(biāo)簽
? ? var tbody = document.getElementsByTagName('tbody')[0];
? ? // 定義一個str變量用來接收我們拼接的表格tr-td字符串
? ? var str = '';
? ? // 遍歷數(shù)組螟深,拿到數(shù)組中的數(shù)據(jù)蛾绎,拼接到表格字符串中
? ? for (var i = 0; i < arr.length; i++) {? ? ? ?
? ? ? str += '<tr>';
? ? ? str += '<td>';
? ? ? str += (i+1);
? ? ? str += '</td>';
? ? ? // 遍歷數(shù)組中的元素對象,拿到對象中的數(shù)據(jù)捏萍,然后拼接在下方的td中
? ? ? for (var key in arr[i]) {
? ? ? ? // 遍歷數(shù)組中的對象arr[i] 通過arr[i][key] 拿到數(shù)據(jù)姓名 年齡 性別的數(shù)據(jù)
? ? ? ? str += '<td>';
? ? ? ? str += arr[i][key];
? ? ? ? str += '</td>';
? ? ? }
? ? ? // 在刪除的td標(biāo)簽上添加一個del類名念搬,便于刪除的時候獲取到這個標(biāo)簽
? ? ? // 在刪除的td標(biāo)簽上添加一個自定義屬性index械荷,將這條數(shù)據(jù)在數(shù)組中的索引作為屬性值存起來
? ? ? str += '<td class="del" index= '+i+'>';
? ? ? str += '刪除';
? ? ? str += '</td>';
? ? ? str += '</tr>';? ? ?
? ? }
? ? // 將拼接好的表格字符轉(zhuǎn)tr-td放到tbody中
? ? tbody.innerHTML = str;
? ? // 調(diào)用 刪除函數(shù)
? ? del()
? }
? // 點擊參數(shù)數(shù)組中的數(shù)據(jù)搜贤,并渲染頁面
? function del(){
? ? // 獲取所有的刪除td標(biāo)簽,通過del的類名獲取
? ? var dels = document.getElementsByClassName('del');
? ? // 遍歷獲取到的所有刪除td的偽數(shù)組,給每一個刪除td綁定一個點擊事件
? ? for (var i = 0; i < dels.length; i++) {
? ? ? dels[i].onclick = function(){
? ? ? ? // console.log(this);
? ? ? ? // 事件函數(shù)中的this调衰,指向觸發(fā)這個事件的元素
? ? ? ? // 通過點擊刪除 刪除數(shù)組中數(shù)據(jù)
? ? ? ? // 根據(jù)刪除td的index屬性拿到 這條數(shù)據(jù)的索引下邊? getAttribute()
? ? ? ? var index = this.getAttribute('index');
? ? ? ? // 根據(jù)拿到的索引刪除數(shù)組中數(shù)據(jù)膊爪,splice()
? ? ? ? arr.splice(index,1);
? ? ? ? // 調(diào)用 渲染表格的函數(shù)
? ? ? ? bindHtml();
? ? ? }
? ? }
? }
</script>
/*
? ? DOM 節(jié)點 就是DOM中html的所有內(nèi)容
? ? 節(jié)點分類:
? ? ? 1. 文本節(jié)點? html中的文本內(nèi)容和空格換行? innerText
? ? ? 2. 元素節(jié)點? 標(biāo)簽? getElement...
? ? ? 3. 屬性節(jié)點? 標(biāo)簽中的屬性? getAttribute
? */
// 獲取節(jié)點
? // 先獲取到div標(biāo)簽元素
? var div = document.getElementsByTagName('div')[0];
? // 獲取div元素的節(jié)點
? // 1. 獲取元素的所有子節(jié)點,返回子節(jié)點的偽數(shù)組
? // 語法: .childNodes
? // console.log(div.childNodes);
? // 2. 獲取元素的所有子元素節(jié)點,返回子元素節(jié)點的偽數(shù)組
? // 語法:? .children
? // console.log(div.children);
? // 3. 獲取元素的子節(jié)點的第一個節(jié)點
? // 語法: .firstChild
? // console.log(div.firstChild);
? // 4. 獲取元素的最后一個子節(jié)點
? // 語法: .lastChild
? // console.log(div.lastChild);
? // 5. 獲取元素的第一個子元素節(jié)點
? // 語法: .firstElementChild
? // console.log(div.firstElementChild);
? // 6. 獲取元素的最后一個子元素節(jié)點
? // 語法: .lastElementChild
? // console.log(div.lastElementChild);
? // 7. 獲取元素的下一個兄弟節(jié)點
? // 語法: .nextSibling
? // console.log(div.nextSibling);
? // 8. 獲取元素的上一個兄弟節(jié)點
? // 語法: .previousSibling
? // console.log(div.previousSibling);
? // 9. 獲取元素的下一個兄弟元素節(jié)點
? // 語法: .nextElementSibling
? // console.log(div.nextElementSibling);
? // 10. 獲取元素的上一個兄弟元素節(jié)點
? // 語法:.previousElementSibling
? // console.log(div.previousElementSibling);
? // 11. 獲取元素的父節(jié)點元素
? // 語法: .parentNode
? // console.log(div.parentNode);
? // 12. 獲取元素的所有屬性節(jié)點 返回的是屬性節(jié)點偽數(shù)組
? // 語法: .attributes()
? // console.log(div.attributes)
// 獲取div元素
? var div = document.querySelector('div');
? // 獲取div元素的所有子節(jié)點?
? var nodes = div.childNodes
? // console.log(nodes);
? // 獲取div中的第一個節(jié)點---文本節(jié)點
? var text = nodes[0];
? // 獲取div中的第二個節(jié)點---元素節(jié)點
? var ele = nodes[1];
? // 獲取div中的子節(jié)點的最后一個---注釋節(jié)點
? var comment = div.lastChild;
? // 獲取div的屬性節(jié)點的第一個 id屬性節(jié)點
? var attrs = div.attributes[0];
? // console.log(text,ele,comment,attrs);
? /*
? ? 節(jié)點屬性:
? ? ? 節(jié)點類型? 通過 節(jié)點.nodeType 獲取
? ? ? 節(jié)點名稱? 通過 節(jié)點.nodeName 獲取
? ? ? 節(jié)點值? ? 通過 節(jié)點.nodeValue 獲取
? ? 節(jié)點類型:元素節(jié)點: 1? 屬性節(jié)點:2? 文本節(jié)點:3 注釋節(jié)點:8
? ? 節(jié)點名稱:元素節(jié)點:標(biāo)簽元素名稱大寫? 屬性節(jié)點:屬性名? 文本節(jié)點:#text 注釋節(jié)點:#comment
? ? 節(jié)點值:元素節(jié)點:null 屬性節(jié)點:屬性值? 文本節(jié)點:文本內(nèi)容本身? 注釋節(jié)點:注釋內(nèi)容
? */
? // 節(jié)點類型
? // console.log(text.nodeType);? // 3
? // console.log(ele.nodeType); // 1
? // console.log(comment.nodeType);// 8
? // console.log(attrs.nodeType); // 2
? // 節(jié)點名稱
? // console.log(ele.nodeName);? // P
? // console.log(attrs.nodeName); // id
? // console.log(text.nodeName); // #text
? // console.log(comment.nodeName); // #comment
? // 節(jié)點值
? // console.log(ele.nodeValue);? // null
? // console.log(attrs.nodeValue); // dv
? // console.log(text.nodeValue); //? 文本內(nèi)容
? // console.log(comment.nodeValue); // 注釋
<!DOCTYPE html>
<html lang="en">
<head>
? <meta charset="UTF-8">
? <title>Leon</title>
</head>
<body>
? <table rules = 'all' border = "1">
? ? <thead>
? ? ? <th>序號</th>
? ? ? <th>姓名</th>
? ? ? <th>年齡</th>
? ? ? <th>性別</th>
? ? ? <th>操作</th>
? ? </thead>
? ? <tbody></tbody>
? </table>
</body>
</html>
<script>
? var arr = [
? ? {name: 'Jack',age: 18,gender: '男'},
? ? {name: 'Rose',age: 20,gender: '女'},
? ? {name: 'Top',age: 22,gender: '男'},
? ? {name: 'leon',age: 32,gender: '男'},
? ? {name: 'lisi',age: 31,gender: '女'}
? ];
? var tbody = document.querySelector('tbody');
? var str? = '';
? for (var i = 0; i < arr.length; i++) {
? ? if(i%2 == 0){
? ? ? str += '<tr style="background-color:#ccc">';
? ? }else{
? ? ? str += '<tr style="background-color:pink">';
? ? }
? ? str += '<td>';
? ? str += (i+1);
? ? str += '</td>';
? ? for (var key in arr[i]) {
? ? ? str += '<td>';
? ? ? str += arr[i][key];
? ? ? str += '</td>';
? ? }
? ? str += '<td>';
? ? str += '刪除';
? ? str += '</td>';
? ? str += '</tr>';
? }
? tbody.innerHTML = str;
</script>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<style type="text/css">
??#box{
????border:5px solid #999;
????width:600px;
????margin:0 auto;
????height:350px;
????overflow:hidden;
??}
??ul,ol{
????list-style:none;
????padding:0;
????margin:0;
??}
??ul{
????display:flex;???
????background:pink;
??}
??ul li{
????width:200px;
????height:50px;
????line-height:50px;
????font-size:30px;
????font-weight:bold;
????text-align:center;
????background:pink;
??}
??ul li.current{
????background:#ff0;
??}
??ol li{
????height:300px;
????text-align:center;
????font-size:200px;
????background:#0f0;
????color:#fff;
????line-height:300px;
????font-weight:bold;
????display:none;
??}
??ol li.current{
????display:block;
??}
</style>
</head>
<body>
<div id="box">
??<ul>
????<li class="current">1</li>
????<li>2</li>
????<li>3</li>
??</ul>
??<ol>
????<li class="current">1</li>
????<li >2</li>
????<li >3</li>
??</ol>
</div>
</body>
</html>
<script>
? // 獲取ul中的所有的li
? // 獲取ol中的所有的li
? var ulis = document.querySelectorAll('ul>li');
? var olis = document.querySelectorAll('ol>li');
? // 給ulis中的li綁定點擊事件
? for(var i = 0; i<ulis.length;i++){
? ? // 將li在ul中的下標(biāo)存儲到li標(biāo)簽中
? ? ulis[i].setAttribute('index',i);
? ? ulis[i].onclick = function(){
? ? ? // 拿到所有的ul中的li嚎莉,清除類樣式
? ? ? for(var i = 0; i<ulis.length;i++){
? ? ? ? ulis[i].className = '';
? ? ? }
? ? ? // this表示觸發(fā)點擊事件的元素 li
? ? ? this.className = 'current';
? ? ? // 拿到所有ol中的li,清除樣式
? ? ? for(var i = 0; i<olis.length;i++){
? ? ? ? olis[i].className = '';
? ? ? }
? ? ? // 拿到點擊的這個li的索引
? ? ? var j = this.getAttribute('index');
? ? ? olis[j].className = 'current';
? ? }
? }
</script>
<!DOCTYPE html>
<html lang="en">
<head>
? <meta charset="UTF-8">
? <title>Leon</title>
? <style>
? ? #box{
? ? ? height: 200px;
? ? ? width: 200px;
? ? ? background-color: skyblue;
? ? }
? </style>
</head>
<body>
? <div>我是div</div>
? <div id="box">
? ? <span>我小span <i>6666</i> </span>
? </div>
</body>
</html>
<script>
? //操作DOM節(jié)點米酬,無外乎就是 增刪改查
? // 獲取頁面中的div元素
? // var box = document.querySelector('#box');
? // var sp = document.querySelector('span');
? // 1. 創(chuàng)建元素節(jié)點
? // 語法:document.createElement(標(biāo)簽名)
? // 返回值:可用的DOM元素節(jié)點
? // var dv = document.createElement('div');
? // console.log(dv);
? // 2. 創(chuàng)建文本節(jié)點
? // 語法:document.createTextNode(內(nèi)容);
? // 返回值:返回一個文本節(jié)點
? // var text = document.createTextNode('zhangsan');
? // console.log(text);
? // 3. 向元素中添加元素
? // 語法:元素A.appendChild(節(jié)點B)
? // 將節(jié)點B追加到元素A里面的后面
? // dv.appendChild(text);
? // box.appendChild(dv);
? // 4. 向元素的前面添加一個元素
? // 語法:元素A.insertBefore(節(jié)點B,元素C)
? // 將節(jié)點B添加到元素A里面的元素C的前面
? // var box = document.querySelector('#box');
? // var sp = document.querySelector('span');
? // var dv = document.createElement('div');
? // var text = document.createTextNode('zhangsan');
? // dv.appendChild(text);
? // // box.insertBefore(dv,sp);
? // document.body.insertBefore(dv,box);
? // 5. 移除頁面元素
? // 語法:元素A.removeChild(元素B)
? // 將元素A中的元素B移除
? // var box = document.querySelector('#box');
? // var sp = document.querySelector('span');
? // box.removeChild(sp);
? // 6. 修改元素,替換元素
? // 語法:元素A.replaceChild(節(jié)點B,節(jié)點C)
? // 用節(jié)點B替換元素A中的節(jié)點C
? // var box = document.querySelector('#box');
? // var sp = document.querySelector('span');
? // var dv = document.createElement('div');
? // var text = document.createTextNode('zhangsan');
? // dv.appendChild(text);
? // 將box中的sp替換為dv
? // box.replaceChild(dv,sp);
? // 7.克隆
? // 語法: 元素A.cloneNode(參數(shù))
? // 參數(shù)默認是布爾值false ,如果是true則克隆子元素
? // 返回值:克隆復(fù)制的元素
? // var box = document.querySelector('#box');
? // var cloBox = box.cloneNode(true);
? // console.log(cloBox);
</script>
<!DOCTYPE html>
<html lang="en">
<head>
? <meta charset="UTF-8">
? <title>Leon</title>
? <style>
? ? div{
? ? ? width: 100px;
? ? ? height: 100px;
? ? ? background-color: pink;
? ? ? border: 1px solid red;
? ? }
? ? div::after{
? ? ? content:'';
? ? ? width: 20px;
? ? ? height: 20px;
? ? ? background-color: yellowgreen;
? ? ? display: block;
? ? }
? </style>
</head>
<body>
? <div style="border: 2px solid skyblue;"></div>
</body>
</html>
<script>
? // 獲取div元素
? // var div = document.querySelector('div');
? // 獲取元素的樣式 style 只能獲取行內(nèi)樣式
? // console.log(div.style.border);
? // console.log(div.style.width);
? // 1. getComputedStyle() 全能的獲取樣式方法
? // 不兼容低版本的IE瀏覽器 IE8以下
? // 語法:window.getComputedStyle(元素,參數(shù)).樣式名
? // 參數(shù)不寫默認 null, 獲取元素的樣式值
? // console.log(window.getComputedStyle(div,null).width); // 100px
? // console.log(window.getComputedStyle(div,null).border); // 2px solid rgb(135, 206, 235)
? // 參數(shù) 'after/before' 可以獲取元素偽類的樣式
? // console.log(window.getComputedStyle(div,'after').backgroundColor); // rgb(154, 205, 50)
? // console.log(window.getComputedStyle(div,'after').width); // 20px
? // 2. curentStyle()
? // 可以兼容ie8以下的瀏覽器
? // 語法:元素.currentStyle.樣式
? // var div = document.querySelector('div');
? // console.log(div.currentStyle.width); // 100px
? // 獲取樣式的兼容函數(shù)
? function getStyle(ele,style){
? ? try {
? ? ? return window.getComputedStyle(ele)[style];? ? ?
? ? } catch (error) {
? ? ? return ele.currentStyle[style];? ? ?
? ? }
? }
? // var div = document.querySelector('div');
? // console.log(getStyle(div,'width'));
? // console.log(getStyle(div,'backgroundColor'));
? // var div = document.querySelector('div');
? // // 設(shè)置樣式只能通過style的形式
? // // window.getComputedStyle(div).width = '1000px'; // 報錯
? // div.style.width = '1000px';
</script>
<!DOCTYPE html>
<html lang="en">
<head>
? <meta charset="UTF-8">
? <title>Leon</title>
? <style>
? ? *{margin: 0;padding: 0;}
? ? #box{
? ? ? width: 400px;
? ? ? height: 400px;
? ? ? background-color: pink;
? ? ? margin-left: 10px ;
? ? ? position: relative;?
? ? }
? ? #dv{
? ? ? width: 200px;
? ? ? height: 200px;
? ? ? background-color: green;
? ? ? border: 10px solid red;
? ? ? padding: 5px 10px;
? ? ? margin: 10px auto;
? ? ? position: absolute;
? ? ? top: 20px;
? ? ? left: 20px;
? ? }
? </style>
</head>
<body>
? <div id="box">
? ? <div id="dv"></div>
? </div>
</body>
</html>
<script>
? // 獲取元素的尺寸? 內(nèi)容+padding+border
? // offsetWidth 寬 offsetHeight 高
? //? 獲取dv元素
? // var dv = document.querySelector('#dv');
? // console.log(dv.offsetWidth);? // 240
? // console.log(dv.offsetHeight); // 230
? // 獲取元素的偏移量
? // offsetLeft offsetTop
? // 如果元素沒有定位趋箩。則獲取的是相對于頁面的左上角
? // var dv = document.querySelector('#dv');
? // console.log(dv.offsetLeft); // 90
? // console.log(dv.offsetTop); // 10
? // 如果元素有定位赃额,則獲取的是相對父元素左上角的定位
? // var dv = document.querySelector('#dv');
? // console.log(dv.offsetLeft); // 20
? // console.log(dv.offsetTop); // 30
</script>
<!DOCTYPE html>
<html lang="en">
<head>
? <meta charset="UTF-8">
? <title>Leon</title>
</head>
<body>
? <button>按鈕</button> <br>
? <img src="./images/1.jpg" alt="" width="500">
</body>
<script>
? // 將圖片名稱放到數(shù)組中
? var imgs = ['1.jpg','2.jpg','3.jpg','4.jpg','5.jpg'];
? // 點擊按鈕隨機獲取圖片名
? // 1. 獲取按鈕綁定點擊事件
? document.querySelector('button').onclick = function(){
? ? // 2. 獲取img標(biāo)簽并設(shè)置src屬性的值
? ? // document.querySelector('img').setAttribute('src','./images/'+imgs[getNum(0,imgs.length-1)]);
? ? // src屬性是自有屬性,可以直接通過 元素.src 設(shè)置獲取
? ? document.querySelector('img').src = './images/'+imgs[getNum(0,imgs.length-1)];
? }
? function getNum(a,b){
? ? return Math.floor(Math.random()*(b-a+1)+a);
? }
</script><!DOCTYPE html>
<html lang="en">
<head>
? <meta charset="UTF-8">
? <title>Leon</title>
</head>
<body>
? <button>按鈕</button> <br>
? <img src="./images/1.jpg" alt="" width="500">
</body>
<script>
? // 將圖片名稱放到數(shù)組中
? var imgs = ['1.jpg','2.jpg','3.jpg','4.jpg','5.jpg'];
? // 點擊按鈕隨機獲取圖片名
? // 1. 獲取按鈕綁定點擊事件
? document.querySelector('button').onclick = function(){
? ? // 2. 獲取img標(biāo)簽并設(shè)置src屬性的值
? ? // document.querySelector('img').setAttribute('src','./images/'+imgs[getNum(0,imgs.length-1)]);
? ? // src屬性是自有屬性叫确,可以直接通過 元素.src 設(shè)置獲取
? ? document.querySelector('img').src = './images/'+imgs[getNum(0,imgs.length-1)];
? }
? function getNum(a,b){
? ? return Math.floor(Math.random()*(b-a+1)+a);
? }
</script>