【前端】:Dom

来源:http://www.cnblogs.com/0zcl/archive/2017/02/20/6417506.html
-Advertisement-
Play Games

前言: 昨天寫了篇關於JavaScript的,今天寫篇Dom的(插入4個實例),寫完之後感覺知識點還不少~ 內容當然會用到【前端】:JavaScript的知識。下篇博客會寫關於jQuery~~ 一、DOM介紹 文檔對象模型(Document Object Model,DOM)是一種用於HTML和XM ...


前言: 昨天寫了篇關於JavaScript的,今天寫篇Dom的(插入4個實例),寫完之後感覺知識點還不少~ 內容當然會用到【前端】:JavaScript的知識。下篇博客會寫關於jQuery~~

 

一、DOM介紹

文檔對象模型(Document Object Model,DOM)是一種用於HTML和XML文檔的編程介面。它給文檔提供了一種結構化的表示方法,可以改變文檔的內容和呈現方式。我們最為關心的是,DOM把網頁和腳本以及其他的編程語言聯繫了起來。DOM編程:可以操作html所有的標簽,進行找、操作(document 是整個HTML文檔的對象,通過document可以對HTML進行操作)!也是javascript的一部分。
註:一般說的JS讓頁面動起來泛指JavaScript和Dom

 

二、查找標簽(選擇器)

1. 通過以下三種方法可到HTML文檔中查找某標簽

1 var nid = document.getElementById("aa");          //找到id為aa的標簽,因為id是唯一的,所以是element (ID選擇器)
2 var lis = document.getElementsByTagName("li");    //找到li標簽 (標簽選擇器)
3 var lis2 = document.getElementsByClassName("bb"); //找到class為bb的標簽,可能有多個標簽應用bb樣式,故用elements (class選擇器)

 

2. 找到某標簽後若想對其值進行修改,可用innerText(eg: div標簽)  若value(eg: input標簽)

學會如何查找標簽後,下麵來看超簡單的例子: 

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title>Title</title>
 6 </head>
 7 <body>
 8     <div>
 9         <div id="aa">zcl</div>
10     </div>
11     <ul>
12         <li>11</li>
13         <li>22</li>
14         <li>33</li>
15     </ul>
16     <div>
17         <div class="bb">zcl</div>
18         <div class="bb">zcl</div>
19         <div class="bb">zcl</div>
20     </div>
21 
22     <form>
23         <p>用戶名:<input name="username" value="zcl"/></p>
24         <p>密碼:<input name="pwd" value="123"/></p>
25     </form>
26 
27 <script type="text/javascript">  //<script> 其實預設為<script type="text/javascript">  表示要寫JS代碼
28     var nid = document.getElementById("aa");
29     nid.innerText = "alex";
30 
31     var lis = document.getElementsByTagName("li");
32     for(var i in lis){
33         var item = lis[i];
34         item.innerText = i;
35     }
36 
37     var lis2 = document.getElementsByClassName("bb");
38     console.log(lis2);    //列印: [div.bb, div.bb, div.bb]
39 
40     var username = document.getElementsByName("username")[0];
41     var pwd = document.getElementsByName("pwd")[0];
42     console.log(username, pwd); //列印: <input name="username" value="zcl"> <input name="pwd" value="123">
43     console.log(username.value, pwd.value);  //列印: zcl 123
44 </script>
45 
46 </body>
47 </html>

運行界面:

你可能會問:var username = document.getElementsByName("username")[0];為什麼要在後面加[0]??雖然已經找到input標簽,但是input標簽的name屬性可能相同(eg:radio標簽),所以只取第一個。(當然在本例中,name屬性是不同的,你不加[0]也沒事~)

 

實例一: 自增數

接下來做一個好玩的東西,在界面做一個按紐(不會做出按紐,建議看我寫的【前端】:HTML),按紐前面是數字1,你一按button,數字變為2,再按變為3.……

其實思路很簡單,先寫個div標簽,內容初始為1,再寫個buttton,button有個onclick屬性(裡面是Add()函數),一點擊button則調用onclick事件,去調用Add()函數要做啥?當然是將1變為2啦,前提是必須先找到div標簽,再修改div標簽的內容(通過innerText).下麵請看代碼:

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title>s3</title>
 6 </head>
 7 <body>
 8 
 9     <div>
10         <div id="num">1</div>
11         <!--一點擊button,就會執行onclick屬性裡面的值(eg:某個函數)-->
12         <input type="button" value="+1" onclick="Add()"/>
13     </div>
14 
15     <script>
16         function Add() {
17 //            alert("hello");
18             var nid = document.getElementById("num");
19             var text = nid.innerText;
20             text = parseInt(text);
21             text += 1;
22             nid.innerText = text;
23         }
24     </script>
25 </body>
26 </html>
View Code

 

三、操作文本內容

  • 獲取標簽中間文本內容: innerText  
  • 獲取標簽中間內容: innerHTML   

下麵用個例子來說明兩者區別:

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title>Title</title>
 6 </head>
 7 <body>
 8     <div id = "n1">
 9         zcl
10         <h2>alex</h2>
11     </div>
12 
13     <script type="text/javascript">
14         var text = document.getElementById("n1");
15         console.log(text.innerText);  //只取文本內容,取alex而不是<h2>alex</h2>
16         console.log(text.innerHTML);
17     </script>
18 
19 </body>
20 </html>

運行界面:

 

特殊的標簽,如: input  select  textarea. 獲取與修改標簽的文本內容通過value.

下麵以textarea為例(input,select測試只需在下麵代碼改下id便可~),獲取文本框原有值zcl, 點擊確定後將zcl修改為alex:

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title>s5</title>
 6 </head>
 7 <body>
 8     <h3><input type="button" onclick="GetValue()" value="獲取值"></h3>
 9     <input id = "n2" type="text"/>
10     <select id="n3">
11         <option value="1">上海</option>
12         <option value="2">北京</option>
13         <option value="3">廣州</option>
14     </select>
15     <textarea id="n4">alex</textarea>
16 
17 
18     <script type="text/javascript">
19         function GetValue() {
20             var obj = document.getElementById("n4");
21             alert(obj.value); //獲取值
22             //obj.value = "";  //可對獲取的值進行修改 如:清空
23             //obj.value = "2";    //將獲取的值修改為2,即北京
24             obj.value = "zcl";
25         }
26 
27 </script>
28 
29 </body>
30 </html>
View Code

運行界面(3張圖):

 

四、事件

前面說到了onclick事件,事件肯定不止onclick一個啦~~

 

實例二: 下麵以onfocus和onblur事件為例,做一個高大上的搜索框:

搜索框實例可看做以下知識的綜合:

  1. 事件
  2. 選擇器
  3. 標簽內容獲取/修改

功能講解:

搜索框預設文字是“請輸入關鍵字”,當滑鼠一點(即框獲得焦點),原本的"請輸入關鍵字"消失
若原本框內文字為空(或內容為空格),當框失去焦點時,恢複原本的內容"請輸入關鍵字"。感覺好高大上!!!

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title>s5</title>
 6 </head>
 7 <body>
 8     <input type="text" id="search" value="請輸入關鍵字" onfocus="Focus()" onblur="Blur()"/>
 9 
10     <script type="text/javascript">
11         function Focus() {
12             var nid = document.getElementById("search");
13             var value = nid.value;
14             if(value == "請輸入關鍵字"){
15                 nid.value = "";
16             }
17         }
18         function Blur() {
19             var nid = document.getElementById("search");
20             var value = nid.value;
21             if(value.trim() == ""){
22                 nid.value = "請輸入關鍵字";
23             }
24         }
25 
26     </script>
27 </body>
28 </html>
View Code

 

五、創建標簽

1. 在講創建標簽前,先說一個點:

<a href="http://www.cnblogs.com/0zcl/" target="_blank" onclick="return AddElement();">添加</a>

上面的代碼是一個a標簽,你一點它按理會跳轉到www.cnblogs.com/0zcl,但是a標簽又有一個onclick事件,一點擊就會執行;真是尷尬的境地,是先跳轉?還是先執行onclick事件??你可以自己測試下~~

下麵給出結論:

  • 先執行自定義事件onclik,再執行預設事件href
  • 要想執行完onclick事件(自定義)後不執行href(預設),只需在onclick內返回false(務必記住,後面會用到!)

2. 創建標簽有兩種方式

  • 通過自己寫字元串的方式來創建標簽(eg:創建input標簽: var tag = "<inputtype='text'/>";)
  • 通過對象來創建(推薦)(eg:創建a標簽: var createObj = document.createElement("a");)

代碼實例:

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title>s6</title>
 6 </head>
 7 <body>
 8     <div id="container"></div>
 9     <!--先執行自定義事件onclik,再執行預設事件href-->
10     <!--要想執行完onclick事件後不執行href,只需在onclick內返回False-->
11     <a href="http://www.cnblogs.com/0zcl/" target="_blank" onclick="return AddElement();">添加</a>
12 
13     <script>
14 
15         function AddElement() {
16             /*
17             var nid = document.getElementById("container");
18             var tag = "<input type='text'/>";
19 //            nid.innerHTML = tag;   //能創建input標簽,但只能創建一個。
20             //每點擊一次,將新添加標簽到後面
21             container.insertAdjacentHTML("beforeBegin", tag);
22             */
23 
24             //創建a標簽並拿到其對象
25             var createObj = document.createElement("a");
26             createObj.href = "http://www.cnblogs.com/0zcl/";
27             createObj.innerText = "前程明亮博客";
28             console.log(createObj);
29             //對於一個標簽對象,能否通過innerText往裡添加
30             //發現不行,添加的只是href
31             var nid = document.getElementById("container");
32 //            nid.innerText = createObj;
33             nid.appendChild(createObj);
34 
35             return false;
36         }
37     </script>
38 
39 </body>
40 </html>
View Code

對於第一種:點擊3次,創建3個input標簽.

再點擊一次,則再創建一個標簽,加在已有標簽的後面。

對於第二種:不能通過innerText往裡添加(nid.innerText = createObj;),添加的只是href, 如下圖:

可以用:nid.appendChild(createObj);一點擊添加,就添加一個a標簽。

 

六、操作標簽屬性

  1. 對於預設屬性可直接用 .(點) 來操作;
  2. 對於自定義的屬性可通過setAttribute(), getAttribute() [也可以設置預設的屬性,相當於萬能]
  3. 對於class屬性,可以通過obj.className = "xx" 來設置;也可以通過setAttribute("class", "xx");
  4. 對於style裡面的font-size屬性,通過obj.style.fontSize = "xx“ (註意S是大寫的,同理obj.style.backgroundColor="xx";橫桿去除,橫桿後第一個字母大寫)來設置;

操作實例見下圖:

 

七、提交表單

提交表單有兩種形式:

  1. 通過submit
  2. 通過JS也可以提交

1. 通過submit提交表單,一點提交,將輸入的內容鏈接到sogou進行搜索(說實話,第一次運行出現搜索的內容時,我的天吶!!神奇啊!!!):

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title>s7</title>
 6 </head>
 7 <body>
 8     <form id="form" action="https://www.sogou.com/web" method="get">
 9         <input name="query" type="text" />
10         <input type="submit" value="提交" />
11     </form>
12 
13 </body>
14 </html>

2. 通過JS提交表單:

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5
              
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 白駒過隙,寒假已經餘額不足,回頭想想,也就是看了兩本書,做了幾個並不大的工程,看著QQ群裡面一些大神們聊天,時不時有的沒的還插幾句,一句話沒人理也是正常事情。有時候還幫同是菜鳥的網友解決問題,好不尷尬!在大神們的隻言片語中,也汲取出來一點對行業的認識,數電、模電和信號處理這幾門課沒有系統的學習沒有學 ...
  • 1.要求 1)輸入用戶名密碼 2)認證成功後顯示歡迎信息 3)輸錯三次後鎖定2.需求分析 1)用戶信息存儲在文件中(login/config/user_login.txt) 2)用戶輸入用戶名和密碼 3)判斷用戶名是否存在,存在則繼續,不存在則提示繼續輸入 4)判斷輸入的用戶名是否已經被鎖定,如果已... ...
  • 最近在做一個swing小項目,其中需要把存儲在硬碟中的圖片文件顯示出來,總結瞭如下方法: 1. Graphics g = getGraphics();String name = "E:/CapabilityModel/out.gif";Image img = Toolkit.getDefaultTo ...
  • 在上一篇日誌中將hibernate的會話工廠sessionFactory註入到了spring的容器中,但這樣還不夠,因為hibernate的增刪改查是要使用事務機制的, 所以還要在spring中配置事務管理,將hibernate管理事物的權利交給spring,這樣,在代碼中就無需手動管理事務了。 1 ...
  • 本文為學習筆記,學習課程為慕課網Java入門第三季中的集合框架部分,若需要研究文中的代碼,可前往下載。http://www.imooc.com/learn/110 1. List(Collection子介面) 1.1 實例化 List list = new ArrayList();  &e ...
  • 如何讓背景圖片拉伸填充,這個問題聽起來似乎很簡單。但是很遺憾的告訴大家。不是我們想的那麼簡單。 比如一個容器(body,div,span)中設定一個背景。這個背景的長寬值在css2.1之前是不能被修改的。 所以實際的結果是只能重覆顯示,所以出現了repeat,repeat-x,repeat-y,no ...
  • 【常用麵包屑】9種不同的麵包屑和分散式多步驟導航 實例代碼 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" ...
  • 1. 在layer彈窗組件中 如果使用了flash播放器,全屏是正常的 但若使用了HTML5的播放器,全屏失效 舉個慄子 1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta charset="utf-8"> 5 <title></title> 6 <script ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...