目錄javascript
前端三大塊css
其餘插件:html
<script type="text/javascript" src="../js/setting.js"></script>
JS是一種弱類型語言,它的變量類型由它的值來決定前端
number, strign ,boolean, undefined, null
object
定義變量以下:java
var a = 123; var d; //這個是undefined
方法1:(不推薦)python
/* title是屬性 */ /* 問題是:這個語句是按照上下順序執行的 */ document.getElementById('div1').title="我看到了!";
<div di="div1" class='div1' title='這是div元素哦'>這是一個div元素</div>
方法2:數組
/* 當整個文檔加載完以後,再執行這個語句 */ window.onload = function(){ document.getElementById('div1').title="我看到了!"; }
能夠參考任何標籤的屬性,包括linkdeng瀏覽器
操做方法主要分爲兩種:服務器
.
的操做[]
操做屬性的寫法閉包
class
屬性寫成className
style
屬性裏面的屬性,有橫槓的改爲駝峯式font-size
改爲oA.style.fontSize
操做方法1的寫法
<script type="text/javascript"> window.onload = function(){ /* 寫屬性 */ document.getElementById('div1').href="www.baidu.com"; /* 沒有title屬性會自動添加 */ var oA = document.getElementById('div1'); oA.title="666"; /* 讀屬性 */ alert(oA.id); } </script> ..... <div id="div1">這是一個div元素</div>
操做方法2的寫法
<script type="text/javascript"> window.onload = function(){ var oA = document.getElementById('div1'); var attr ='color'; /* 三種方法徹底一致 */ oA.style.color='red'; oA.style[attr]='red'; oA['style'][attr]='red'; } </script> ..... <div id="div1">這是一個div元素</div>
<script type="text/javascript"> window.onload = function(){ var oA = document.getElementById('div1'); /* 用處1:能夠讀取這個標籤包裹的元素 */ /* 輸出:這是一個div元素 */ alert(oA.innerHTML) /* 用處2:能夠塞文字 */ oA.innerHTML = "666"; } </script> ..... <div id="div1">這是一個div元素</div>
<script type="text/javascript"> // 定義函數 function func_name(){ Operations; } // 調用函數1:直接調用 // 調用函數2:在控件中調用 func_name(); </script> ... <input type="button", name="", onclick="func_name()">
技巧:統一js代碼再同一塊中:實現JS和HTML分離
<script type="text/javascript"> window.onload = function(){ var oBtn01 = document.getElementById('btn01'); var oBtn02 = document.getElementById('btn02'); /* 注意不要寫括號 */ oBtn01.skin01; } function skin01(){ var oLink = document.getElementById('link1') oLink.href = '1.css' } </script> ... <input type="button", name="", value='皮膚01' id="btn01"> <input type="button", name="", value='皮膚02' id='btn02'>
JS解析過長分爲兩個階段,先是編譯階段,而後執行階段,在編譯階段會將Function定義的函數提早,而且將var定義的變量聲明提早(賦值不提早),將它複製爲underfined
<script type="text/javascript"> // 變量的預解析 alert(a); //a的聲明提早,由於沒有賦值因此彈出undefined,a的值未定義 alert(c); //會報錯,c沒有聲明 var a = 10; // 函數的預解析 my_akert(); // 函數的預解析,這個彈出hello function my_akert(){ alert('hello')! } </script>
沒有函數名的函數
<script type="text/javascript"> window.onload = function (){ var oDiv = document.getElementById('div1'); oDiv.onclick = function (){ alert('hello'); } } </script>
傳入多個參數
<script type="text/javascript"> window.onload = function (){ var oDiv = document.getElementById('div1'); function changestyle(styl,val){ oDiv.style[styl] = val; } changestyle('color', gold); changestyle('backgound', red); changestyle('width', 300px); } </script> ..... <div id="div1">這是一個div元素</div>
返回值
實現兩個輸入框,值進行相加的操做
<script type="text/javascript"> window.onload = function (){ var oInput01 = document.getElementById('input01'); var oInput02 = document.getElementById('input02'); var oBtn = document.getElementById('btn'); oBtn.onclick = function (){ var val01 = oInput01.value; var val02 = oInput02.value; var rs = add(val01,val02); alert(rs) } function add(a,b){ var c = parseInt(a) + parseInt(b) return c; } } </script> ..... <input type="text" name="" value="" id="input01"> <input type="text" name="" value="" id="input02"> <input type="button" name="" value="相加" id="btn">
<input type="text" id="input01"> <input type="text" id="input02"> <input type="button" value="相加" id='btn'>
return關鍵字
運算符
+,-,*,/, %
==, >=,<=, !=, &&(and), ||(or), |(not)
<!DOCTYPE html> <html lang="en" dir="ltr"> <head> <meta charset="utf-8"> <title></title> <style type="text/css"> .box{ width: 300px; height: 300px; backgound:gold; } </style> <script type="text/javascript"> window.onload = function(){ var a1 = document.getElementById('box'); var btn = document.getElementById('btn'); var a = 100; // 單條件語句 btn.onclick = function(){ if (a1.style.display == "none"){ a1.style.display == "block"; } else{ a1.style.display == "none"; } } // 多條件語句--建議用switch-case寫 if (a>50){ a = 50; } else if (a>30){ a=30; } else { a=0; } } </script> </head> <body> <div id="div1">這是一個div元素</div> <input type="button" name="" value="相加" id="btn"> <div class="box" id="box"></div> </body> </html>
var a ==6; switch(a){ case 1: alert('1'); break; case 2: alert('2'); break; default: alert('0000'); break; }
for(var i=0;i<len;i++){ operations; }
/* 定義方法1: 面向對象法 */ var aRr01 = new Array(1,2,3,4,'abc'); /* 定義方法2:建議使用 */ var aRr02 = [1,2,3,4,'abc']; /* 獲取數組長度 */ var alen = aRr02.length; /* 也能夠設置長度 */ aRr02.length = 10; /* 獲取某個元素,從0開始的角標 */ var aval = aRr02[2]; /* 定義多維數組 */ var aRr03 = [[1,2,3],[4,5,6],['a','b','c']]; var aval02 = aRr03[1][2];
var aRr01 = [1,2,3,4]; // 數組鏈接字符串 var sTr01 = aRr01.join('-'); //輸出1-2-3-4 var sTr02 = aRr01.join('');//輸出1234 aRr01.push(5); //從尾部增長了一個成員:1,2,3,4,5 aRr01.pop(); //從尾部刪除了一個成員 1,2,3,4 aRr01.unshift(0); //從頭部增長了一個成員 aRr01.shift(); //從頭部刪除了一個成員 aRr01.reverse(); // 將元素倒裝,4,3,2,1 aRr01.indexOf(2); // 只返回元素2第一次出現的index值 aRr01.splice(2,1,7,8,9); // 從第2個元素開始,刪除1個元素,而後在此位置增長7,8,9
window.onload = function (){ for(var i=0;i<aLi.length;i++){ aLi[i].style.backgound='gold'; } var arr = [5,7,9]; // 函數由咱們建立,不禁咱們調用,數組有幾個元素,就會執行幾回 // 每次執行時,以實參形式傳遞進來 // 瀏覽器在回調函數中傳遞三個參數 // 1. value--當前正在遍歷的元素: 5,7,9 // 2. index--當前正在遍歷的元素索引: 0,1,2 // 3. arr ---當前正在遍歷的數組 arr.foreach(function(value, index, arr){ console.log("value=" + value + ", index = " + index + ", array = " + arr); }); }
經過document.getElementByTagName
獲取的是一個選擇集,不是數組,可是能夠經過下標方式操做選擇集中的dom元素
window.onload = function (){ /* 選擇特定的li元素 */ var oList = document.getElementById('list01'); /* aLi是一個選擇集,而不是數組,獲取文檔中全部的li元素 */ var aLi = oList.getElementByTagName('li'); for(var i=0;i<aLi.length;i++){ aLi[i].style.backgound='gold'; } }
<ul id='list01'> <li>1</li> <li>2</li> <li>3</li> <li>4</li> </ul> <ul id='list02'> <li>5</li> <li>6</li> </ul>
var aList = [1,2,3,3,4,5,2,3,1,5,4,3,2,2,1]; var aList2=[]; for(vari=0;i<aList.length;i++){ if(aList.indexOf(aList[i]==i)){ aList2.push(aList[i]); } }
<!DOCTYPE html> <html lang="en" dir="ltr"> <head> <meta charset="utf-8"> <title>測試</title> <script type="text/javascript"> window.onload = function(){ var a1 = document.getElementById('input01'); var a2 = document.getElementById('input02'); var op = document.getElementById('fuhao'); var btn = document.getElementById('btn'); btn.onclick = function(){ var v1 = a1.value; var v2 = a2.value; var fuhao = op.value; // 判斷輸入框是否爲空 if (v1 == '' || v2 == ''){ alert('不能爲空'); return; } // 判斷輸入爲數字 if(isNaN(v1) || isNaN(v2)){ alert('請輸入數字'); return; } switch(fuhao){ case '0': alert(parseFloat(v1) + parseFloat(v2)); break; case '1': alert(parseFloat(v1) - parseFloat(v2)); break; case '2': alert(parseFloat(v1) * parseFloat(v2)); break; case '3': alert(parseFloat(v1) / parseFloat(v2)); break; } } } </script> </head> <body> <h1>計算器</h1> <input type="text" name="" value="" id="input01"> <select class="" name="" id="fuhao"> <option value="0">+</option> <option value="1">-</option> <option value="2">*</option> <option value="3">/</option> </select> <input type="text" name="" value="" id="input02"> <input type="button" name="" value="計算" id="btn"> </body> </html>
JS的組成
ECMAscript javascript
的語法(變量,函數,循環語句的語法)DOM
文檔對象模型,操縱html和cssBOM
瀏覽器對象模型,操做瀏覽器的方法+
parseInt()
將數字字符串轉化爲整數parseFloat()
將數字字符串轉化爲小數split('')
把一個字符串分割成字符串組成的數組charAt(index)
獲取字符串中的某個字符indexOf(value)
查找字符串是否含有某字符substring(start,end)
截取字符串用法str.split('').reverse().join('');
字符串反轉toUpperCase()
字符串轉大寫toLowerCase()
字符串轉小寫屬於BOM,瀏覽器的用處
定時器的做用
用處1:異步操做
/* 定時器: setTimeout 只執行一次定時器 clearTimeout 關閉只執行一次的定時器 setInterval 反覆執行的定時器 clearInterval 關閉反覆執行的定時器 */ /* 等1000毫秒才彈出來 */ setTimeout(myalert, 1000); function myalert(){ alert('Hello'); }
同時咱們能夠自定義彈框
<style type="text/css"> .pop_con{ display: none; } .pop{ width:400px; height: 300px; background-color: #fff; border: 1px solid #000; position: fixed; left: 50%; top:50%; margin-left: -200px; margin-top: -150px; /* z-index用於設置成層級 */ z-index=9999; } .mask{ position: fixed; width: 100%; height: 100%; background-color: #fff; left: 0; top: 0; /* 設置透明 */ opacity: 0.3; filter:alpha(opacity=30); z-index=9990; } </style> <div class="pop_con" id="pop"> <div class="pop"> <h3>提示信息</h3> <a href="#" id="shutoff">關閉</a> </div> <div class="mask"></div> </div>
window.onload = function (){ var oPop = document.getElementById('pop'); var oShut = document.getElementById('shutoff'); setTimeout(showpop,40000); function showpop(){ oPop.style.display:block; } oShut.onclick = function(){ oPop.style.display = 'none'; } }
關閉定時器
// 執行一次的定時器 var timer = setTimeout(function(){ alert('hello'); },4000); // 剛執行就關閉 clearTimeout(timer); var timer2 = setInterval(function(){ alert('hello'); },2000); clearInterval(timer2);
<style type="text/css"> .box{ width:100px; height:100px; background-color: gold; position: fixed; left: 20px; top: 20px; } </style> <script type="text/javascript"> window.onload = function(){ var oBox = document.getElementById('box'); var left = 20; var timer = setInterval(function(){ left++; oBox.style.left = left + 'px'; if(left>700){ clearInterval(timer); } },30); } </script> <div class="box" id="box"></div>
<script type="text/javascript"> window.onload = function(){ var oDiv1 = document.getElementById('div1'); function timego()){ var now = new Date(); var year = now.getFullYear(); var month = now.getMonth()+1; var date = now.getDate(); var week = now.getDay(); var hour = now.getHours(); var minute = now.getMinutes(); var second = now.getSeconds(); oDiv1.innerHTML = '當前時間是' + year + '年' + month + '月' + date + '日' + toweek(week) + hour + ':' + minute + ':'+ second; } timego(); setInterval(timego,1000); } function toweek(num){ switch(num){ case 0: return '星期天'; break; case 1: return '星期一'; break; case 2: return '星期二'; break; case 3: return '星期三'; break; case 4: return '星期四'; break; case 5: return '星期五'; break; case 6: return '星期六'; break; } } </script> </head> <body> <div id="div1"></div> </body> </html>
結果是
當前時間是2019年3月12日星期二11:53:34
<!DOCTYPE html> <html lang="en" dir="ltr"> <head> <meta charset="utf-8"> <title>測試</title> <script type="text/javascript"> window.onload = function(){ var oDiv = document.getElementById('div1'); function timeleft(){ var now = new Date(); var future = new Date(2019,10,30,24,0,0); // 實體從服務器獲取 var left = parseInt((future-now)/1000); //轉爲秒 var day = parseInt(left / 86400); var hour = parseInt((left%86400)/3600); var mintue = parseInt(((left%86400)%3600)/60); var second = left%60; if (left<=0){ window.location.href = "http://www.baidu.com"; } oDiv.innerHTML = '距離2019年11月30日晚上24點還有--' + day + '天' + hour + '時' + mintue + '分' + second + '秒'; } timeleft(); setInterval(timeleft,1000); } </script> </head> <body> <div class="" id="div1"> </div> </body> </html>
函數變量化
這種方式只能在函數定義後面調用
var myalert = funtion(){ alert('hello'); } myalert();
/* 封閉函數的定義 (function(){...})(); 1. 省去函數名 2. 局部變量不會影響其餘變量(相同名字) */ var str = "abc"; (function (){ var str = '歡迎訪問個人主頁'; var myfunc = function(){ ...; } myfunc; alert(str); })();
函數嵌套,函數裏面再定義函數,內部函數能夠引用外部函數的參數和變量,變量存在閉包裏面不會被回收
<script type="text/javascript"> function aa(b){ var a=12; function bb(){ alert(a); alert(b); } return bb; } var cc = aa(24); // cc=bb cc(); </script>
<script type="text/javascript"> var cc = (function(b){ var a=12; function bb(){ alert(a); alert(b); } return bb; })(24); </script>
<!DOCTYPE html> <html lang="en" dir="ltr"> <head> <meta charset="utf-8"> <title>測試</title> <script type="text/javascript"> window.onload = function(){ var aLi = document.getElementsByTagName('li'); for(var i=0;i<aLi.length;i++){ // 通常循環沒法保存i,此時的i是4 // 經過閉包存i (function(i){ aLi[i].onclick = function(){ alert(i); } })(i); } } </script> </head> <body> <ul> <li>1</li> <li>2</li> <li>3</li> <li>4</li> </ul> </body> </html>
對象 | 方法 | 說明 |
---|---|---|
document | document.referrer | 獲取上一個跳轉頁面的地址 |
locaiton | window.location.href window.location.search window.location.hash |
獲取或者重定url地址 獲取地址參數部分 獲取頁面錨點或者哈希值 |
Math | Math.random Math.floor Math.ceil |
獲取0-1的隨機數 向下取整 向上取整 |
<script type="text/javascript"> var data = window.location.search; // 在網址輸入「..../?a=123」 的時候輸出 「?a=123」 alert(data); var hash = window.location.hash; // 在網址輸入「....#=123」 的時候輸出 「#=123」 alert(hash); </script>
將相關的變量和函數組合成一個總體,這個總體叫作對象,對象中的變量叫作屬性,變量中的函數叫作方法, js對象相似字典
可是JS沒有類,類是經過函數實現的
<script type="text/javascript"> var Tom = { name: 'tom', age: 18, showname: function(){ alert('my name is ' + this.name); }, showage: function(){ alert('my age is ' + this.age); } } alert(Tom.name); Tom.showname(); </script>
經過一個函數建立對象
<script type="text/javascript"> function Person(name, age){ var o = new Object(); // 建立空對象 o.name = name; o.age = age; o.showname = function(){ alert('my name is ' + this.name); }; o.showage = function(){ alert('my age is ' + this.age); } return o; } var tom = Person('tom',18); tom.showname(); </script>
使用工廠方式建立的對象,使用的都是object,致使沒法區分多種不一樣類型的對象
構造函數就是用通常函數建立的,區別是加了new
構造函數的執行流程:
使用同一個構造函數的對象,稱爲同一類對象,也稱爲該類的實例
<script type="text/javascript"> function Person(name, age){ this.name = name; // this爲新建的對象,tom, jack,向新建對象添加屬性 this.age = age; this.showname = function(){ // 爲對象添加方法 alert('my name is ' + this.name); }; this.showage = function(){ alert('my age is ' + this.age); } } var tom = new Person('tom',18); var jack = new Person('jack',20); tom.showname(); console.log(tom instanceof Person); // true console.log(tom instanceof Object); // alert(tom.showname == jack.showname); // false, 浪費資源 </script>
問題: 每個對象的方法都有一個新的方法,浪費資源
咱們所建立的每個函數,解析器都會向函數中添加一個屬性prototype
, 這個屬性對應原型對象
prototype
沒用__proto__
訪問prototype
原型尋找,沒有就去原型對象的原型去找,直到找到Object
原型<script type="text/javascript"> function Person(name, age){ this.name = name; this.age = age; } // prototype上綁定的方法能夠被全部person對象公用 // prototype爲原型對象,全部同一個類的實例均可以訪問到這個原型對象, // 能夠將共有的內容設置到這個原型對象中 Person.prototype.showname = function(){ alert('my name is ' + this.name); } Person.prototype.showage = function(){ alert('my age is ' + this.age); } // toString是在打印對象的時候自動的內容,咱們能夠重寫這個方法讓它打印更詳細的信息 // console.log(tom); person[name=「tom」, age=20] Person.prototype.toString = function(){ return "person[name = " + this.name + ", age=" + this.age + "]"; } var tom = new Person('tom',18); var jack = new Person('jack',20); console.log(tom.__proto__ == Person.prototype); // true console.log(tom.hasOwnProperty("name")); // false,只有自己有屬性纔會true,這個方法在原型裏 alert(tom.showname == jack.showname); // true, 更加高效 </script>
<script type="text/javascript"> // 定義父類 function Fclass(name, age){ this.name = name; this.age = age; } Fclass.prototype.showname = function(){ alert('my name is ' + this.name); } Fclass.prototype.showage = function(){ alert('my age is ' + this.age); } // 定義子類,繼承父類 function Sclass(name, age, job){ // 繼承屬性:call或者apply // call:改變當前函數執行的this // apply和call的用法同樣,只是語法不一樣: Fclass.apply(this, [name, age]); Fclass.call(this, name, age); this.job = job; } // 繼承方法: prototype Sclass.prototype = new Fclass(); Sclass.showjob = function(){ alert('my job is ' + this.job); } var tom = new Sclass('tom',20,'engineer'); tom.showage(); </script>
object.window
,指向的是一個對象,稱爲函數執行的上下文對象<script type="text/javascript"> var name ="全局"; function fun(){ // console.log(this.name); // 這種方式永遠是"全局" console.log(this.name); // 隨着調用的對象不一樣而變化 } var obj = { name: "sun", sayName: fun }; var obj2 = { name: "kkk", sayName: fun }; console.log(obj.sayName == fun); // true,同一個函數 fun(); // 以函數調用的時候,this指向對象(上下文),爲Object.window obj.sayName(); // 以方法調用的時候,this爲Object.object(「sun」) obj2.sayName(); // 以方法調用的時候,this爲Object.object(「kkk」) </script>
結果是
true 全局 sun kkk
var a = new Obect(); a = null;
body, head, h1..
都轉爲對象(就能夠經過面向對象對他進行操做)body, head, h1..
節點 | 節點名稱 | 節點類型 | 節點值 |
---|---|---|---|
文檔節點 | #document | 9 | null |
元素節點 | 標籤名 | 1 | null |
屬性節點 | 屬性名 | 2 | 屬性值 |
文本節點 | #text | 3 | 文本內容 |
<!DOCTYPE html> <html lang="en" dir="ltr"> <head> <meta charset="utf-8"> <title>測試</title> <script type="text/javascript"> // 獲取button對象 var btn = document.getElementById("btn"); // 修改button的屬性 btn.innerHTML = "你好啊"; </script> </head> <body> <button id='btn'>我是按鈕</button> </body> </html>
<script type="text/javascript"> window.onload = function(){ var btn = document.getElementById("btn"); console.log(btn); btn.onclick = function(){ alert('hello'); } } </script> .... <input type="button" name="" value="我是按鈕" id="btn">
也就是說須要使用window.onload = function(){}
方法 | 說明 |
---|---|
getElmentById() | 經過惟一id獲取元素節點對象,返回對象 |
getElementsByTagName() | 經過標籤名獲取一組元素節點對象,返回數組 |
getElementByName() | 經過name獲取一組節點對象,返回數組 |
屬性的寫法
class
屬性寫成className
style
屬性裏面的屬性,有橫槓的改爲駝峯式font-size
改爲oA.style.fontSize
方法 | 說明 |
---|---|
getElmentsByTagName() | 獲取當前節點的指定標籤名後代節點 |
屬性 | 說明 |
---|---|
childNodes | 當前節點的全部子節點(會獲取全部的各類節點,包括空白) |
firstChild | 當前節點的第一個子節點(包括其餘節點,空白等) |
firstElementChild | 當前節點的第一個子元素(IE8以上) |
lastChild | 當前節點的最後一個子節點 |
childern | 當前節點的全部子元素(推薦) |
parentNode | 當前節點的父節點 |
previousSibling | 當前節點的前一個兄弟節點(包括其餘節點,空白等) |
previousElementSibling | 前節點的前一個兄弟元素(IE8以上) |
nextSibling | 當前節點的後一個兄弟節點 |
<script type="text/JavaScript"> var btn = document.getElmentById("btn"); btn.onclick = function(){ // 獲取id爲city的元素 var city = document.getElmentById("city"); // 查找city下 的全部li節點 var lis = city.getElementsByTagName("li"); for(var i=0;i<lis.length;i++){ alert(lis[i].innerHTML); } } </script>
// 獲取`body`標籤 var body = document.body; // 獲取`html`標籤 var html = document.documentElement; // 獲取頁面全部元素, body,html, head, script,... var all = document.all; var all = document.getElementsByTagName("*"); // 獲取class內容>IE9 var box1 = document.getElementByClassName("box1"); // 獲取含有class=「box1」的div // querySelector: 根據CSS選擇器來選擇--只返回一個元素 var box1_div = document.querySelector(".box1 div"); // 返回符合條件的全部box var box1_div = document.querySelectorAll(".box1");
方法 | 說明 |
---|---|
appendChild() | 添加新的子節點到指定節點 |
removeChild() | 刪除子節點 |
replaceChild() | 替換子節點 |
insertBefore() | 在指定的子節點前面插入新的子節點 |
createAttribute() | 建立屬性節點 |
createElement() | 建立元素節點 |
createTextNode() | 建立文本節點 |
getAttribute() | 返回指定的屬性值 |
setAttribute() | 設置屬性值爲指定的值 |
<!DOCTYPE html> <html lang="en" dir="ltr"> <head> <meta charset="utf-8"> <title>表格</title> <script type="text/javascript"> function delA(){ // 點擊後刪除超連接所在行 // 獲取當前tr var tr= this.parentNode.parentNode; // 獲取要刪除的員工名稱 var emp = tr.getElementsByTagName("td")[0].innerHTML; // 確認是否刪除 if(confirm("真的刪除" + emp + "?")){ // 刪除tr tr.parentNode.removeChild(tr); } return false; // 讓a不要跳轉 } window.onload = function(){ // 實現刪除功能 var allA = document.getElementsByTagName("a"); for (var i=0; i<allA.length; i++){ // for循環會在頁面加載完成時,當即執行,而相應函數只是在點擊的時候執行,此時for循環已經完成 // 此時的i爲3 // console(i) = 3; // 不加括號,對象賦值給this allA[i].onclick = delA; } // 實現添加功能 var name = document.getElementById("empName"); var age = document.getElementById("empAge"); var btn = document.getElementById("addEmpButton"); btn.onclick = function(){ // 建立tr var tr = document.createElement("tr"); console.log(name.value); // 設置tr內容 tr.innerHTML = "<td>" + name.value + "</td>" + "<td>" + age.value + "</td>" + "<td><a href='javascript:;'>Delete</a></td>"; var a = tr.getElementsByTagName("a")[0]; a.onclick = delA; // 獲取table var employee_table = document.getElementById("employee_table"); // 獲取table的tbody var tbody = employee_table.getElementsByTagName("tbody")[0]; // 將tr添加到tbody中 tbody.appendChild(tr); } } </script> </head> <body> <table id="employee_table"> <tbody> <tr> <th>Name</th> <th>Age</th> <th> </th> </tr> <tr> <td>Tom</td> <td>23</td> <td><a href="javascript: ;">Delete</a></td> </tr> <tr> <td>Jerry</td> <td>12</td> <td><a href="deleteEmp?id=002">Delete</a></td> </tr> </tbody> </table> <hr /> <div class="" id="formDiv"> <h4>添加新成員</h4> <table> <tr> <td class="word">name: </td> <td class="inp"> <input type="text" name="empName" id="empName"/> </td> </tr> <tr> <td class="word">age: </td> <td class="inp"> <input type="text" name="age" id="empAge"/> </td> </tr> <tr> <td colspan="2" align="center"> <button id="addEmpButton" value="abc">Submit</button> </td> </tr> </table> </div> </body> </html>
元素.style.樣式名 = 樣式值
元素.style.樣式名
元素.currentStyle.樣式
css對象 = getComputedStyle(元素名,僞元素(null))
, css對象封裝了樣式信息,css.width
<script type="text/javascript"> window.onload = function(){ var box1 = document.getElementById("box1"); var box2 = document.getElementById("box1"); var btn01 = document.getElementById("btn"); /* * 功能: 修改元素CSS樣式 * 經過JS修改元素的CSS樣式 * 語法: 元素.style.樣式名 = 樣式值 * 注意: 若是CSS中含有-, 應該換成駝峯狀 * 其實設置的是內聯樣式(優先級高),因此會當即顯示 */ btn01.onclick = function(){ box1.style.width = "300px"; box1.style.backgroundColor = "yellow"; }; // 獲取樣式表樣式(當前顯示樣式) btn02.onclick = function(){ var ar = getComputedStyle(box1); alert(ar.width); } }; </script>
Event Handlers
)被觸發時(e.g, onmousemove), 瀏覽器會自動將一個事件對象(event)做爲實參傳遞給響應函數鼠標 / 鍵盤屬性
),比兔座標,鼠標滾輪方向,按鍵,等等...<script type="text/javascript"> window.onload = function(){ // 當事件的相應函數被觸發時(onmousemove), 瀏覽器會自動將一個事件對象(event)做爲實參傳遞給響應函數 // 這個事件對象包含了不少信息,比兔座標,鼠標滾輪方向,按鍵,等等... // 爲了處理不一樣瀏覽器兼容問題 event = event || window.event; btn.onmousemove = function(event){ var x = window.event.clientX; var y = window.event.clientY; } } </script>
<script type="text/javascript"> window.onload = function(){ var s1 = document.getElementById("s1"); var box1 = document.getElementById("box1"); s1.onclick = function(event){ alert("我是span"); // 取消事件冒泡 event = event | window.event; event.cancelBubble = true; } box1.onclick = function(){ alert("我是box1"); } document.onclick = function(){ alert("我是document"); } }; </script>
<script type="text/javascript"> window.onload = function(){ var lis = document.getElementsByTagName("li"); var ul = document.getElementById("ul"); var btn = document.getElementById("btn"); // 問題1: 新加入的超連接沒有綁定事件 btn.onclick = function(){ var li = document.createElement("li"); li.innerHTML = "<a href='javascript:;'>連接新來的</a>"; ul.appendChild(li); }; // 問題2: 只能爲已經有的每個超連接綁定事件,新的超連接須要從新綁定,不推薦 // 解決方法: 將其綁定給元素的共同的祖先元素 /* * for(var i=0;i<lis.length;i++){ * lis[i].onclick = function(){ * alert("666"); * } * }; */ // 由於這是一個冒泡,點擊a,冒泡到ul---新添加的都有了 ul.onclick = function(event){ // 只有點擊的是link的class時 if (event.target == "link") { alert("我是ul的單擊函數"); } } }; </script>
addEventListener
<script type="text/javascript"> window.onload = function(){ btn01. addEventListener("listener", function()[ alert(1); ], false); btn01. addEventListener("listener", function()[ alert(2); ], false); }; </script>
<script type="text/javascript"> window.onload = function(){ function bind(obj, eventStr, callback){ if (obj.addEventListener) { // 大部分瀏覽器兼容的方式 obj.addEventListener(eventStr, callback, false); } else { // IE8及如下 obj.attachEvent("on" + eventStr, callback); } } }; </script>