bom and dom

bom:Broswer Object Model: 瀏覽器對象模型
- navigator: 獲取客戶機的信息(瀏覽器的信息)
document.write(navigator.appName);
- screen:獲取屏幕的信息
document.write(screen.width + "<br />");
document.write(screen.height);
- location:請求url地址 - href屬性
//獲取當前到請求的url地址
document.write(location.href);
//設置URL地址
function href(){
  location.href = "http://www.baidu.com";
}
- history:請求的url的歷史記錄javascript

window:窗口對象,頂層對象(所用的bom對象都是在window裏面操做的)
相關方法:
- window.alert():警告框,顯示內容。簡寫alert()
- confirm():確認框
- var flag = window.confirm("顯示的內容");css

1 //confirm():確認框
2 var flag = window.confirm("是否刪除");
3 if(flag==true){
4     alert("刪除成功")
5 }else{
6     alert("刪除失敗");
7 }

- prompt():輸入的對話框
- window.prompt("在顯示的內容","輸入框裏面的默認值");
- window.prompt("please input : ","0");
- open():打開一個新的窗口
  open("打開的新窗口的地址url","","窗口特徵,好比窗口寬度和高度");html

1 function open1(){
2     window.open("http://jd.com","","width=300,height=200");
3 }

- close():關閉窗口(瀏覽器兼容性比較差)
- window.close();java

- 定時器
setInterval("js代碼",毫秒數) 1秒=1000毫秒
clearInterval(): 清除setInterval設置的定時器
node

setTimeout("js代碼",毫秒數)
clearTimeout() : 清除setTimeout設置的定時器
數組

dom:Document Object Model:文檔對象模型
- 文檔:超文本文檔(超文本標記文檔) html 、xml
- 對象:提供了屬性和方法
- 模型:使用屬性和方法操做超文本標記型文檔
--可使用js裏面的dom裏面提供的對象,使用這些對象的屬性和方法,對標記型文檔進行操做
如何使用dom解析html?
瀏覽器

DOM模型有三種:
DOM level 1:將html文檔封裝成對象。
DOM level 2:在level 1的基礎上添加新的功能,例如:對於事件和css樣式的支持。
DOM level 3:支持xml 1.0的一些新特性。
DHTML:動態HTML,不是一門語言。是不少技術的簡稱。包括
html: 封裝數據
css:使用屬性和屬性值設置樣式
dom:操做html文檔(標記型文檔)
javascript:專門指的是js的語法語句(ECMAScript)
document對象:表示整個文檔
經常使用方法:write()方法
(1)向頁面輸出變量(值)
(2)向頁面輸出html代碼
- var str = "abc";
document.write(str);
document.write("<hr/>");
- getElementById(); 經過id獲得元素(標籤)app

 1 <body>
 2     <input type="text" id="name" value="大兄逮"/><br />
 3 </body>
 4 <script type="text/javascript">
 5     // 使用getElementById獲得input標籤對象
 6     var input1 = document.getElementById("name");
 7     // 獲得input標籤具體某元素的值
 8     document.write(input1.value);
 9     // 向input裏設置一個值value
10     input1.value = "賣掛";
11 </script>
View Code

- getElementsByName();- 經過標籤的name的屬性值獲得標籤
- 返回的是一個集合(數組)dom

 1 <body>
 2     <input type="text" name="name1" value="text_1"/><br />
 3     <input type="text" name="name1" value="text_2"/><br />
 4     <input type="text" name="name1" value="text_3"/><br />
 5     <input type="text" name="name1" value="text_4"/><br />
 6 </body>
 7 <script type="text/javascript">
 8     // getElementsByName獲取input標籤
 9     var inputs = document.getElementsByName("name1");// 傳參數是標籤name裏面的值
10     //alert(intputs.length);
11     // 遍歷數組
12     for(var i=0;i<inputs.length;i++){
13         var input1 = inputs[i]; // 每次循環獲得input對象,賦值到input1
14         alert(input1.value); // 獲得每一個input標籤裏的value
15     }
16 </script>
View Code

- getElementsByTagName("標籤名稱");- 經過標籤名稱獲得元素ide

 1 <body>
 2     <input type="text" value="text_1"/><br />
 3     <input type="text" value="text_2"/><br />
 4     <input type="text" value="text_3"/><br />
 5 </body>
 6 <script type="text/javascript">
 7     // 經過getElementsByTagName獲得標籤名
 8     var inputs = document.getElementsByTagName("input");
 9     //alert(inputs.length)
10     for(var i = 0;i<inputs.length;i++){
11         var input1 = inputs[i];
12         alert(input1.value);
13     }
14 </script>
View Code

注:只有一個標籤,這個標籤只能使用name獲取到,這個使用,使用getElementsByName返回的是一個數組,可是如今只有一個元素,這個時候不須要遍歷,而是能夠直接經過數組的下標獲取到值。

1 //經過name獲得input標籤
2 var inputs = document.getElementsByName("name_1")[0];
3 alert(inputs.value);
4 //經過標籤得到元素
5 var inputs = document.getElementsByTagName("input")[0];
6 alert(inputs.value);

案例:在末尾添加節點
第一步:獲取到ul標籤:getElementById
第二步:建立li標籤:document.createElement("標籤名稱")方法
第三步:建立文本:document.createTextNode("文本內容");
第四步:把文本添加到li下面:使用 appendChild方法
第五步:把裏添加到ul末尾:使用 appendChild方法

 1 <!DOCTYPE html>
 2 <html>
 3     <head>
 4         <meta charset="UTF-8">
 5         <title>案例 在末尾添加標籤</title>
 6     </head>
 7     <body>
 8         <ul id="ulid">
 9             <li>1111</li>
10             <li>2222</li>
11             <li>3333</li>
12             <li>4444</li>
13         </ul>
14         <br />
15         <input type="button" value="add" onclick="add()"/>
16     </body>
17     <script type="text/javascript">
18         // 在末尾添加節點
19         function add(){
20             // 獲取到ul標籤
21             var ul1 = document.getElementById("ulid");
22             // 建立標籤
23             var li1 = document.createElement("li");
24             // 建立文本
25             var text1 = document.createTextNode("newNode");
26             
27             // 文本添加到li下面
28             li1.appendChild(text1);
29             // li加入到ul下面
30             ul1.appendChild(li1);
31         }
32     </script>
33 </html>
View Code

元素對象(element對象)
要操做element對象,首先必需要獲取到element,使用document裏面相應的方法獲取。
getAttribute("屬性名稱"):獲取屬性裏面的值

1 // 獲取input標籤
2 var input1 = document.getElementById("inputId");
3 //alert(input1.value);
4 alert(input1.getAttribute("value"));

setAttribute("name","value"):設置屬性的值

1 var input1 = document.getElementById("inputId");
2 input1.setAttribute("value","2222");
3 alert(input1.getAttribute("value"));

removeAttribute("name"):刪除屬性【不能刪除value】

1 var input1 = document.getElementById("inputId");
2 alert(input1.getAttribute("value"));//默認值:aaa
3 input1.removeAttribute("value");
4 alert(input1.getAttribute("value"));// null

想要獲取標籤下面的子標籤,使用屬性 childNodes,可是這個屬性兼容性不好。惟一有效辦法,使用getElementsByTagName方法。

 1 <!DOCTYPE html>
 2 <html>
 3     <head>
 4         <meta charset="UTF-8">
 5         <title>Element對象</title>
 6     </head>
 7     <body>
 8         <ul id="ulid">
 9             <li>aaaaaa</li>
10             <li>bbbbbb</li>
11             <li>cccccc</li>
12         </ul>
13         <br />
14     </body>
15     <script type="text/javascript">
16         // 獲取ul下面的全部子標籤(子元素)
17         // 獲取ul標籤
18         var ul = document.getElementById("ulid");
19         // 獲取ul下面的子標籤
20 //        var lis = ul.childNodes;
21 //        alert(lis.length);//7
22         var lis = ul.getElementsByTagName("li");
23         alert(lis.length)
24     </script>
25 </html>
View Code

Node對象屬性一:nodeName、nodeType、nodeValue

標籤(元素)節點對應的值
- nodeType:返回值1
- nodeName:返回標籤元素的名稱,大寫標籤名稱 好比SPAN
- nodeValue:返回值null

屬性節點對應的值
- nodeType:返回值2
- nodeName:返回這個屬性名稱
- nodeValue:返回這個屬性的值

文本節點對應的值
- nodeType:返回值3
- nodeName:返回一個內容爲#text的字符串
- nodeValue:文本內容

 1 <!DOCTYPE html>
 2 <html>
 3     <head>
 4         <meta charset="UTF-8">
 5         <title>Node對象屬性</title>
 6     </head>
 7     <body>
 8         <span id="spanid">啊哈哈</span>
 9     </body>
10     <script type="text/javascript">
11         // 獲取span標籤對象
12         var span1 = document.getElementById("spanid");
13         /*
14         alert(span1.nodeType); // 1
15         alert(span1.nodeName); // SPAN
16         alert(span1.nodeValue); //null
17         */
18         
19         // 獲取屬性節點
20         var id1 = span1.getAttributeNode("id");
21         /*
22         alert(id1.nodeType); // 2
23         alert(id1.nodeName); // id 屬性名稱
24         alert(id1.nodeValue); // spandid 屬性值
25         */
26         
27         // 獲取文本
28         var text1 = span1.firstChild;
29         alert(text1.nodeType); // 3
30         alert(text1.nodeName); // #text
31         alert(text1.nodeValue); // 文本內容
32         
33     </script>
34 </html>
View Code

Node對象的屬性二:父節點、子節點、同輩節點

1 <ul id="ulid">
2     <li id="li1">aaaaaa</li>
3     <li id="li2">bbbbbb</li>
4 </ul>

父節點:parentNode
- ul是li的父節點

子節點
- li是ul的子節點
- childNodes:獲得全部子節點,可是兼容性不好
- firstChild:獲取第一個子節點
- lastChild:獲取最後一個子節點

同輩節點
- li直接關係是同輩節點
- previousSibling:返回一個給定節點的上一個兄弟節點。
- nextSibling: 返回一個給定節點的下一個兄弟節點。

詳情代碼:

 1 <!DOCTYPE html>
 2 <html>
 3     <head>
 4         <meta charset="UTF-8">
 5         <title></title>
 6     </head>
 7     <body>
 8         <ul id="ulid"><li id="li1">aaaaaa</li><li id="li2">bbbbbb</li><li id="li3">cccccc</li><li id="li4">dddddd</li></ul>
 9     </body>
10     <script type="text/javascript">
11         /*
12         // 獲取父節點
13         // 獲得li1
14         var li1 = document.getElementById("li1");
15         // 獲得ul
16         var ul1 = li1.parentNode;
17         alert(ul1.id);//ulid
18         */
19         
20         
21         // 獲取ul的第一個子節點 id=li1
22         // 獲得ul
23         var ul1 = document.getElementById("ulid");
24         // 第一個子節點
25         var li1 = ul1.firstChild;
26         alert(li1.id);//li1
27         
28         // 獲得最後一個子節點
29         var li4 = ul1.lastChild;
30         alert(li4.id);//li4
31         
32         
33         /*
34         // 獲取li的id是li3的上一個和下一個兄弟節點
35         var li3 = document.getElementById("li3");
36         alert(li3.previousSibling.id);//li2
37         alert(li3.nextSibling.id);//li4
38         */
39     </script>
40 </html>
View Code

注:不一樣瀏覽器存在的不一樣的解析方式,可能由於空格的緣由而致使獲取不到對應的節點,這時候能夠把列表標籤的空格去掉便可。
操做dom樹
appendChild方法:- 添加子節點到末尾
- 特色:相似於剪切黏貼的效果

 1 <!DOCTYPE html>
 2 <html>
 3     <head>
 4         <meta charset="UTF-8">
 5         <title></title>
 6         <style type="text/css">
 7             #div1{
 8                 width: 200px;
 9                 height: 150px;
10                 border: 2px solid red;
11             }
12             #div2{
13                 width: 250px;
14                 height: 150px;
15                 border: 5px dashed gray;
16             }
17         </style>
18     </head>
19     <body>
20         <div id="div1">
21             <ul id="ulid1">
22                 <li>tom</li>
23                 <li>mary</li>
24                 <li>jack</li>
25             </ul>
26         </div>
27         <div id="div2">
28             
29         </div>
30         <input type="button" value="add" onclick="add()" />
31     </body>
32     <script type="text/javascript">
33         function add(){
34             // 獲得div2
35             var div2 = document.getElementById("div2");
36             // 獲取ul
37             var ul1 = document.getElementById("ulid1");
38             // 把ul添加到div2裏面
39             div2.appendChild(ul1);
40         }
41     </script>
42 </html>
View Code

insertBefore(newNode,oldNode)方法:- 在某個節點以前插入一個新的節點
注:不存在 沒有insertAfter()方法
- 插入一個節點,節點不存在,建立
一、建立標籤
二、建立文本
三、把文本添加到標籤下面

 1 <!DOCTYPE html>
 2 <html>
 3     <head>
 4         <meta charset="UTF-8">
 5         <title></title>
 6     </head>
 7     <body>
 8         <ul id="ulid">
 9             <li id="li1">西施</li>
10             <li id="li2">王昭君</li>
11             <li id="li3">貂蟬</li>
12             <li id="li4">楊玉環</li>
13         </ul>
14          <input type="button" value="insert" onclick="insert()" />
15     </body>
16     <script type="text/javascript">
17         // 在貂蟬以前添加 <li>董小宛</li>
18         function insert(){
19             /*
20              * 1.獲取到li3標籤
21              * 2.建立li
22              * 3.建立文本
23              * 4.把文本添加到li下面
24              * 5.獲取到ul
25              * 6.把li添加到ul下面(在貂蟬以前添加 <li>董小宛</li>)
26              */
27             // 獲取li3標籤
28             var li3 = document.getElementById("li3");
29             // 建立li
30             var li5 = document.createElement("li");
31             //建立文本
32             var text1 = document.createTextNode("董小宛");
33             // 把文本添加到li下面
34             li5.appendChild(text1);
35             // 獲取ul
36             var ul2 = document.getElementById("ulid");
37             // insertBefore(newNode,oldNode);
38             ul2.insertBefore(li5,li3);
39         }
40     </script>
41 </html>
View Code

removeChild方法:刪除節點 -經過父節點刪除,不能本身刪除本身

 1 <!DOCTYPE html>
 2 <html>
 3     <head>
 4         <meta charset="UTF-8">
 5         <title></title>
 6     </head>
 7     <body>
 8         <ul id="ulid">
 9             <li id="li1">西施</li>
10             <li id="li2">王昭君</li>
11             <li id="li3">貂蟬</li>
12             <li id="li4">楊玉環</li>
13         </ul>
14         <input type="button"  value="remove" onclick="remove()"/>
15     </body>
16     <script type="text/javascript">
17         // 刪除末尾節點
18         function remove(){
19             /**
20              * 1.獲取li4標籤
21              * 2.獲取父節點ul標籤
22              * 3.執行刪除(經過父節點刪除)
23              */
24             // 獲取li標籤
25             var templi = document.getElementById("li4");
26             // 獲取父節點 (id方式  parentNode兩種方式獲取)
27             var tempul = document.getElementById("ulid");
28             // 刪除(經過父節點)
29             tempul.removeChild(li4); // 只能刪一次
30         }
31     </script>
32 </html>
View Code

replaceChild(newNode,oldNode)方法: 替換節點
- 不能本身替換本身,經過父節點替換

 1 <!DOCTYPE html>
 2 <html>
 3     <head>
 4         <meta charset="UTF-8">
 5         <title></title>
 6     </head>
 7     <body>
 8         <ul id="ulid">
 9             <li id="li1">紫衫龍王</li>
10             <li id="li2">白眉鷹王</li>
11             <li id="li3">金毛獅王</li>
12             <li id="li4">青翼蝠王</li>
13         </ul>
14         <input type="button"  value="replace" onclick="replace()"/>
15     </body>
16     <script type="text/javascript">
17         // 刪除末尾節點
18         function replace(){
19             // 替換最後一個爲張無忌
20             /**
21              * 1. 獲取li4
22              * 2. 建立標籤li
23              * 3. 建立文本
24              * 4. 把文本添加到li下面
25              * 5. 獲取ul標籤
26              * 6. 執行替換操做
27              */
28             // 獲取li4標籤
29             var tempLi4 = document.getElementById("li4");
30             // 建立li標籤
31             var tempLi5 = document.createElement("li");
32             // 建立文本
33             var tempText = document.createTextNode("張無忌");
34             // 文本添加到li下面
35             tempLi5.appendChild(tempText);
36             // 獲取ul標籤
37             var tempNode = document.getElementById("ulid");
38             // 替換節點
39             tempNode.replaceChild(tempLi5,tempLi4);
40         }
41     </script>
42 </html>
View Code

cloneNode(boolean): 複製節點
- //把ul列表複製到另一個div裏面

 1 <!DOCTYPE html>
 2 <html>
 3     <head>
 4         <meta charset="UTF-8">
 5         <title></title>
 6     </head>
 7     <body>
 8         <ul id="ulid">
 9             <li id="li1">紫衫龍王</li>
10             <li id="li2">白眉鷹王</li>
11             <li id="li3">金毛獅王</li>
12             <li id="li4">青翼蝠王</li>
13         </ul>
14         <div id="divv">
15             <!--被複制的內容放在這個div裏-->
16         </div>
17         
18         <input type="button" value="copy"  onclick="copy()"/>
19     </body>
20     <script type="text/javascript">
21         function copy(){
22             // 把ul列表複製到另外一個div裏面
23             /*
24              * 一、獲取帶ul
25              * 二、執行復制方法cloneNode複製true
26              * 三、把複製以後的內容放到div裏面去
27              *         獲取到div
28              *         appendChild
29              */
30             // 獲取ul
31             var ulid = document.getElementById("ulid");
32             // 複製ul,放到相似剪切板裏面
33             var ulcopy = ulid.cloneNode(true)
34             // 獲取到div
35             var divv = document.getElementById("divv");
36             // 把副本放到divv裏去
37             divv.appendChild(ulcopy);
38         }
39     </script>
40 </html>
View Code

操做dom總結
獲取節點使用方法
- getElementById():經過節點的id屬性,查找對應節點。
- getElementsByName():經過節點的name屬性,查找對應節點。
- getElementsByTagName():經過節點名稱,查找對應節點
插入節點的方法
- insertBefore方法:在某個節點以前插入
- appendChild方法:在末尾添加,剪切黏貼
刪除節點方法
- removeChild方法:經過父節點刪除
替換節點方法
- replaceChild方法:經過父節點替換

相關文章
相關標籤/搜索