整合營銷服務(wù)商

          電腦端+手機(jī)端+微信端=數(shù)據(jù)同步管理

          免費(fèi)咨詢熱線:

          html 5教程之默認(rèn)行為和拖拽思路

          認(rèn)行為

          什么是默認(rèn)行為:默認(rèn)行為就是瀏覽器自己觸發(fā)的事件。比如:a鏈接的跳轉(zhuǎn),form提交時(shí)的跳轉(zhuǎn),鼠標(biāo)右鍵跳轉(zhuǎn);

          oncontexmenu當(dāng)點(diǎn)擊右鍵菜單的時(shí)候;

          return false

          阻止默認(rèn)行為

          if(e.preventDefault) {

          e.preventDefault();

          }else {

          window.event.returnValue = false;

          }

          事件移除。document.onmouseover=null;

          拖拽

          拖拽事件:

          onmousedown onmousemove onmouseup

          拖拽思路:

          1.給目標(biāo)元素添加onmousedown事件,拖拽的前提是在目標(biāo)元素按下鼠標(biāo)左鍵

          2.當(dāng)onmousedown發(fā)生以后,此刻給document添加onmousemove事件,意味著此刻鼠標(biāo)在網(wǎng)頁的移動(dòng)都將改變目標(biāo)元素的位置

          3.在onmousemove事件中,設(shè)定目標(biāo)元素的left和top,

          公式

          目標(biāo)元素的left = 鼠標(biāo)的clientX – (鼠標(biāo)和元素的橫坐標(biāo)差,即offsetX)

          目標(biāo)元素的top = 鼠標(biāo)的clientY– (鼠標(biāo)和元素的縱坐標(biāo)差,即offsetY)

          4.當(dāng)onmousedown發(fā)生以后,此刻給document添加onmouseup事件,意味著此刻鼠標(biāo)在網(wǎng)頁的任意位置松開鼠標(biāo),都會(huì)放棄拖拽的效果

          在onmouseup事件中,取消document的onmousemove事件即可。

          事件觸發(fā)階段主要由于事件流:DOM0級事件處理階段和DOM2級事件處理;

          DOM0級事件處理,是一種賦值方式,是被所有瀏覽器所支持的,簡單易懂容易操作;

          DOM2級事件處理是所有DOM節(jié)點(diǎn)中的方法,可以重復(fù)綁定,但是瀏覽器兼容存在問題;

          非IE下:(這里的事件名不帶on),第三個(gè)參數(shù)表示是在捕獲階段還是冒泡階段。可以重復(fù)綁定事件,執(zhí)行順序按照綁定順序來執(zhí)行。

          oDiv.addEventListener('click',chick,false);

          oDiv.removeEventListener('click',chick ,false);

          IE下:

          只有冒泡階段,所以沒有第三個(gè)參數(shù);(這里的事件名需要加on)

          oDiv.attachEvent();

          oDiv.detachEvent() ;

          兼容問題解決:

          var EventUtil={

          addHandler:function(DOM,EventType,fn){

          if(DOM.addEventListener){

          DOM.addEventListener(EventType,fn,false);

          }else if(DOM.attachEvent){

          DOM.attachEvent('on'+EventType,fn)

          }else{

          DOM['on'+EventType]=fn

          }

          },

          removeHandler:function(DOM,EventType,fn){

          if(DOM.removeEventListener){

          DOM.removeEventListener(EventType,fn,false)

          }else if(DOM.detachEvent){

          DOM.detachEvent('on'+EventType,fn)

          }else{

          DOM['on'+EventType]=null;

          }

          }

          }

          寫一個(gè)完美拖拽的案例:

          TML 中使用 <input> 元素表示單行輸入框和 <textarea> 元素表示多行文本框。

          HTML中使用的 <input> 元素在 JavaScript 中對應(yīng)的是 HTMLInputElement 類型。HTMLInputElement 繼承自 HTMLElement 接口:

          interface HTMLInputElement extends HTMLElement {
              ...
          }

          HTMLInputElement 類型有一些獨(dú)有的屬性和方法:

          • name:表示 <input> 元素的名稱。
          • disabled:表示 <input> 元素是否禁止使用。在表單提交時(shí)不會(huì)包含被禁止的 <input> 元素。
          • autofocus:表示頁面加載時(shí),該元素是否會(huì)自動(dòng)獲得焦點(diǎn)。
          • required:表示表單提交時(shí),該 <input>元素是否為必填。
          • value:表示該 <input> 元素的值。
          • validity:返回一個(gè) ValidityState 對象,表示 <input> 元素的校驗(yàn)狀態(tài)。是只讀屬性。
          • validationMessage:表示 <input> 元素校驗(yàn)失敗時(shí),用戶看到的報(bào)錯(cuò)信息。如果該元素不需要校驗(yàn),或者通過校驗(yàn),該屬性為空字符串。是只讀屬性。
          • willValidate:表示表單提交時(shí),<input> 元素是否會(huì)被校驗(yàn)。是只讀屬性。
          • select():選中 <input> 元素內(nèi)部的所有文本。
          • click():模擬鼠標(biāo)點(diǎn)擊當(dāng)前的 <input> 元素。

          而在上述介紹 HTMLInputElement 類型中的屬性時(shí),type 屬性要特別關(guān)注一下,因?yàn)楦鶕?jù) type 屬性的改變,可以改變<input>的屬性。

          類型

          描述

          text

          文本輸入

          password

          密碼輸入

          submit

          表單數(shù)據(jù)提交

          button

          按鈕

          radio

          單選框

          checkbox

          復(fù)選框

          file

          文件

          hidden

          隱藏的字段

          image

          定義圖像作為提交按鈕

          reset

          重置按鈕

          省略 type 屬性與 type="text"效果一樣, <input> 元素顯示為文本框。

          當(dāng) type 的值為text/password/number/時(shí),會(huì)有以下屬性對 <input> 元素有效。

          屬性

          類型

          描述

          autocomplete

          string

          字符串on或off,表示<input>元素的輸入內(nèi)容可以被瀏覽器自動(dòng)補(bǔ)全。

          maxLength

          long

          指定<input>元素允許的最多字符數(shù)。

          size

          unsigned long

          表示<input>元素的寬度,這個(gè)寬度是以字符數(shù)來計(jì)量的。

          pattern

          string

          表示<input>元素的值應(yīng)該滿足的正則表達(dá)式

          placeholder

          string

          表示<input>元素的占位符,作為對元素的提示。

          readOnly

          boolean

          表示用戶是否可以修改<input>的值。

          min

          string

          表示<input>元素的最小數(shù)值或日期。

          max

          string

          表示<input>元素的最大數(shù)值或日期。

          selectionStart

          unsigned long

          表示選中文本的起始位置。如果沒有選中文本,返回光標(biāo)在<input>元素內(nèi)部的位置。

          selectionEnd

          unsigned long

          表示選中文本的結(jié)束位置。如果沒有選中文本,返回光標(biāo)在<input>元素內(nèi)部的位置。

          selectionDirection

          string

          表示選中文本的方向。可能的值包括forwardbackwardnone

          下面創(chuàng)建一個(gè) type="text" ,一次顯示 25 個(gè)字符,但最多允許顯示 50 個(gè)字符的文本框:

          <input type="text" size="25" maxlength="50" value="initial value">

          HTML 使用的 <textarea> 元素在 JavaScript 中對應(yīng)的是 HTMLTextAreaElement 類型。HTMLTextAreaElement類型繼承自 HTMLElement 接口:

          interface HTMLTextAreaElement extends HTMLElement {
              ...
          }

          HTMLTextAreaElement 類型有一些獨(dú)有的屬性和方法:

          • form:只讀屬性,返回對父表單元素的引用。如果此元素未包含在表單元素中,則它可以是同一文檔中 id 屬性同 form 值的 <form> 元素,如果沒有,該值為 null
          • type:只讀屬性,返回字符串textarea
          • valuestring類型,返回/設(shè)置控件中包含的原始值。
          • textLength:只讀屬性,long類型,返回<textarea>元素的value值的長度。與 value.length 相同。
          • defaultValuestring類型,返回/設(shè)置textarea元素的默認(rèn)值。
          • placeholderstring類型,返回/設(shè)置 textarea 元素的占位符,作為對輸入內(nèi)容的提示。
          • rowsunsigned long類型,返回/設(shè)置textarea元素的可見文本行數(shù)。
          • colsunsigned long類型,返回/設(shè)置 textarea 元素的可見寬度。
          • autofocusboolean類型,返回/設(shè)置textarea元素在頁面加載時(shí)自動(dòng)獲取焦點(diǎn)。
          • name:返回/設(shè)置 textarea 元素的名稱。
          • disabledboolean類型,返回/設(shè)置 textarea 元素是否應(yīng)當(dāng)被禁用。
          • HTMLTextAreaElement.labelsNodeList類型,返回與此select元素關(guān)聯(lián)的標(biāo)簽元素列表。
          • maxLengthlong類型,返回/設(shè)置元素可以輸入的最大字符數(shù)。僅在值更改時(shí)才評估此約束。
          • minLengthlong類型,返回/設(shè)置元素可以輸入的最小字符數(shù)。僅在值更改時(shí)才評估此約束。
          • accessKeyboolean類型,返回/設(shè)置訪問 textarea 的鍵盤快捷鍵。
          • readOnlyboolean類型,返回/設(shè)置 textarea 元素是否為只讀。
          • requiredboolean 類型,返回/設(shè)置 textarea 元素是否為必填項(xiàng)。
          • tabIndexlong類型,返回/設(shè)置 textarea 元素的 tab 鍵導(dǎo)航順序中元素的位置。

          下面創(chuàng)建一個(gè)高度為 25,寬度為 5 的 <textarea> 多行文本框。它與 <input> 不同的是,初始值顯示在 <textarea>...</textarea> 之間:

          <textarea rows="25" cols="5">initial value</textarea>

          注意:處理文本框值的時(shí)候最好不要使用 DOM 方法,而應(yīng)該使用 value 屬性。

          選擇文本

          <input><textarea> 都支持 select() 方法,該方法用于選中文本框中的所有內(nèi)容。該方法的語法為:

          select(): void

          下面看一個(gè)示例:

          let textbox = document.forms[0].elements["input-box"];
          textbox.select();

          也可以在文本框獲得焦點(diǎn)時(shí),選中文本框的內(nèi)容:

          textbox.addEventListener("focus", (event) => {
              event.target.select();
          });

          select 事件

          當(dāng)選中文本框中的文本或使用 select() 方法時(shí),會(huì)觸發(fā) select 事件。

          let textbox = document.forms[0].elements["textbox1"];
          textbox.addEventListener("select", (event) => {
              console.log(`Text selected: ${textbox.value}`);
          });

          取得選中的文本

          HTML5 對 select 事件進(jìn)行了擴(kuò)展,通過 selectionStartselectionEnd 屬性獲取文本選區(qū)的起點(diǎn)偏移量和終點(diǎn)偏移量。如下所示:

          function getSelectedText(textbox){
              return textbox.value.substring(textbox.selectionStart,
          textbox.selectionEnd);
          }

          注意:在 IE8 及更早版本不支持這兩個(gè)屬性。

          選中部分文本

          HTML5 提供了 setSelectionRange() 方法用于選中部分文本:

          setSelectionRange(start, end, direction): void;
          • start:被選中的第一個(gè)字符的位置索引,從 0 開始。如果這個(gè)值比元素的 value 長度還大,則會(huì)被看做 value 最后一個(gè)位置的索引。
          • end:被選中的最后一個(gè)字符的下一個(gè)位置索引。如果這個(gè)值比元素的 value 長度還大,則會(huì)被看做 value 最后一個(gè)位置的索引。
          • direction:該參數(shù)是可選的字符串類型,表示選擇方向,可以傳入 “forward”/“backward”/“none” 三個(gè)值。

          下面看一個(gè)例子:

          <input type="text" id="text-sample" size="20" value="Hello World!">
          <button onclick="selectText()">選中部分文本</button>
          <script>
              function selectText() {
                  let input = document.getElementById("text-sample");
                  input.focus();
                  input.setSelectionRange(4, 8);    // o Wo
              }
          </script>

          如果想要看到選中效果,必須讓文本框獲得焦點(diǎn)。

          輸入過濾

          不同文本框經(jīng)常需要保證輸入特定類型或格式的數(shù)據(jù),或許數(shù)據(jù)需要包含特定字符或必須匹配某個(gè)特定模式。而文本框并未提供驗(yàn)證功能,因此要配合 JavaScript 腳本實(shí)現(xiàn)輸入過濾功能。

          屏蔽字符

          有些輸入框需要出現(xiàn)或不出現(xiàn)特定字符。如果想要將輸入框變成只讀的,只需要使用 preventDefault()方法將按鍵都屏蔽:

          input.addEventListener("keypress", (event) => {
              event.preventDefault();
          });

          而要屏蔽特定字符,就需要檢查事件的 charCode 屬性。如下所示,使用正則表達(dá)式實(shí)現(xiàn)只允許輸入數(shù)字的輸入框:

          input.addEventListener("keypress", (event) => {
              if (!/\d/.test(event.key)) {
                  event.preventDefault();
              }
          });

          還有一個(gè)問題需要處理:復(fù)制、粘貼及涉及Ctrl 鍵的其他功能。在除IE 外的所有瀏覽器中,前面代碼會(huì)屏蔽快捷鍵Ctrl+C、Ctrl+V 及其他使用Ctrl 的組合鍵。因此,最后一項(xiàng)檢測是確保沒有按下Ctrl鍵,如下面的例子所示:

          textbox.addEventListener("keypress", (event) => {
          if (!/\d/.test(String.fromCharCode(event.charCode)) &&
          event.charCode > 9 &&
          !event.ctrlKey){
          event.preventDefault();
          }
          });

          最后這個(gè)改動(dòng)可以確保所有默認(rèn)的文本框行為不受影響。這個(gè)技術(shù)可以用來自定義是否允許在文本框中輸入某些字符。

          處理剪貼板

          IE 是第一個(gè)實(shí)現(xiàn)了剪切板相關(guān)的事件以及通過JavaScript訪問剪切板數(shù)據(jù)的瀏覽器,其它瀏覽器在后來也都支持了相同的事件和剪切板的訪問,后來 HTML5 將其納入了規(guī)范。以下是與剪切板相關(guān)的 6 個(gè)事件:

          • beforecopy:發(fā)生復(fù)制操作前觸發(fā)。
          • copy:發(fā)生復(fù)制操作時(shí)觸發(fā)。
          • beforecut:發(fā)生剪切操作前觸發(fā)。
          • cut:發(fā)生剪切操作時(shí)觸發(fā)。
          • beforepaste:發(fā)生粘貼操作前觸發(fā)。
          • paste:發(fā)生粘貼操作時(shí)觸發(fā)。

          剪切板事件的行為及相關(guān)對象會(huì)因?yàn)g覽器而異。在 Safari、Chrome 和 Firefox 中,beforecopybeforecutbeforepaste 事件只會(huì)在顯示文本框的上下文菜單時(shí)觸發(fā),但 IE 不僅在這種情況下觸發(fā),也會(huì)在 copycutpaste 事件在所有瀏覽器中都會(huì)按預(yù)期觸發(fā)。

          在實(shí)際的事件發(fā)生之前,通過beforecopybeforecutbeforepaste 事件可以在向剪貼板發(fā)送或從中檢索數(shù)據(jù)前修改數(shù)據(jù)。不過,取消這些事件并不會(huì)取消剪貼板操作。要阻止實(shí)際的剪貼板操作,必須取消 copycutpaste 事件。

          剪貼板的數(shù)據(jù)通過 clipboardData 對象來獲取,且clipboardData 對象提供 3 個(gè)操作數(shù)據(jù)的方法:

          • getData(format):從剪貼板獲取指定格式的數(shù)據(jù),接收的參數(shù)為指定獲取的數(shù)據(jù)格式,如果沒有指定數(shù)據(jù)格式或指定數(shù)據(jù)格式不存在,則此方法返回一個(gè)空字符串。
          • setData(format, data):給剪貼板賦予指定格式的數(shù)據(jù),第一個(gè)參數(shù)指定數(shù)據(jù)格式,第二個(gè)參數(shù)為第一個(gè)參數(shù)賦予數(shù)據(jù)。如果指定數(shù)據(jù)格式不存在,則將其添加到數(shù)據(jù)存儲的末尾;如果指定數(shù)據(jù)格式存在,則將數(shù)據(jù)替換在指定數(shù)據(jù)格式的位置。
          • clearData(format):刪除指定格式的數(shù)據(jù),接收的參數(shù)為指定要?jiǎng)h除的數(shù)據(jù)格式,如果指定格式不存在,則此方法不執(zhí)行任何操作;如果此參數(shù)為空字符串或未提供,則將刪除所有格式的數(shù)據(jù)。

          clipboardData 對象在 IE 中使用 window 獲取,在 Firefox、Safari 和 Chrome 中使用 event 獲取。為防止未經(jīng)授權(quán)訪問剪貼板,只能在剪貼板事件期間訪問 clipboardData 對象;IE 會(huì)在任何時(shí)候都暴露 clipboardData 對象。因此,要兼容兩者,最好在剪貼板事件期間使用該對象。

          function getClipboardText(event){
              var clipboardData = (event.clipboardData || window.clipboardData);
              return clipboardData.getData("text");
          }
          function setClipboardText (event, value){
              if (event.clipboardData){
                  return event.clipboardData.setData("text/plain", value);
              } else if (window.clipboardData){
                  return window.clipboardData.setData("text", value);
              }
          }

          如果文本框只有數(shù)字,那剪貼時(shí),就需要使用paste事件檢查剪貼板上的文本是否無效。如果無效,可以取消默認(rèn)行為:

          input.addEventListener("paste", (event) => {
              let text = getClipboardText(event);
              if (!/^\d*$/.test(text)){
                  event.preventDefault();
              }
          });

          注意:Firefox、Safari和Chrome只允許在onpaste事件中訪問getData()方法。

          自動(dòng)切換

          在 JavaScript 中,可以用在當(dāng)前字段完成時(shí)自動(dòng)切換到下一個(gè)字段的方式來增強(qiáng)表單字段的易用性。比如,常用手機(jī)號分為國家好加手機(jī)號。因此,我們設(shè)置 2 個(gè)文本框:

          <form>
              <input type="text" name="phone1" id="phone-id-1" maxlength="4">
              <input type="text" name="phone2" id="phone-id-2" maxlength="11">
          </form>

          當(dāng)文本框輸入到最大允許字符數(shù)后,就把焦點(diǎn)移到下一個(gè)文本框,這樣可以增加表單的易用性并加速數(shù)據(jù)輸入。如下所示:

          <script>
              function tabForward(event){
                  let target = event.target;
                  if (target.value.length == target.maxLength){
                      let form = target.form;
                      for (let i = 0, len = form.elements.length; i < len; i++) {
                          if (form.elements[i] == target) {
                              if (form.elements[i+1]) {
                                  form.elements[i+1].focus();
                              }
                              return;
                          }
                      }
                  }
              }
              let inputIds = ["phone-id-1", "phone-id-2"];
              for (let id of inputIds) {
                  let textbox = document.getElementById(id);
                  textbox.addEventListener("keyup", tabForward);
              }
          </script>

          這里,tabForward() 函數(shù)通過比較用戶輸入文本的長度與 maxLength 屬性的值來檢測輸入是否達(dá)到了最大長度。如果兩者相等,就通過循環(huán)表中的元素集合找到當(dāng)前文本框,并把焦點(diǎn)設(shè)置到下一個(gè)元素。

          注意:上面的代碼只適用于之前既定的標(biāo)記,沒有考慮可能存在的隱藏字段。

          HTML5

          HTML5 新增了一些表單提交前,瀏覽器會(huì)基于指定的規(guī)則進(jìn)行驗(yàn)證,并在出錯(cuò)時(shí)顯示適當(dāng)?shù)腻e(cuò)誤信息。而驗(yàn)證會(huì)基于某些條件應(yīng)用到表單字段中。

          必填字段

          表單字段中添加 required 屬性,用于標(biāo)注該字段是必填項(xiàng),不填則無法提交。該屬性適用于<input><textarea><select>。如下所示:

          <input type="text" name="account" required>

          也可以通過 JavaScript 檢測對應(yīng)元素的 required 屬性來判斷表單字段是否為必填項(xiàng):

          let isRequired = document.forms[0].elements["account"].required;

          也可以檢測瀏覽器是否支持 required 屬性:

          let isRequiredSupported = "required" in document.createElement("input");

          注意:不同瀏覽器處理必填字段的機(jī)制不同。Firefox、Chrome、IE 和Opera 會(huì)阻止表單提交并在相應(yīng)字段下面顯示有幫助信息的彈框,而Safari 什么也不做,也不會(huì)阻止提交表單。

          更多輸入類型

          HTML5 為 <input> 元素增加了幾個(gè)新的 type 值。如下所示:

          類型

          描述

          number

          數(shù)字值的輸入

          date

          日期輸入

          color

          顏色輸入

          range

          一定范圍內(nèi)的值的輸入

          month

          允許用戶選擇月份和年份

          week

          允許用戶選擇周和年份

          time

          允許用戶選擇時(shí)間(無時(shí)區(qū))

          datetime

          允許用戶選擇日期和時(shí)間(有時(shí)區(qū))

          datetime-local

          允許用戶選擇日期和時(shí)間(無時(shí)區(qū))

          email

          電子郵件地址的輸入

          search

          搜索(表現(xiàn)類似常規(guī)文本)

          tel

          電話號碼的輸入

          url

          URL地址的輸入

          這些輸入表名字段應(yīng)該輸入的數(shù)據(jù)類型,并且提供了默認(rèn)驗(yàn)證。如下所示:

          <input type="email" name="email">
          <input type="url" name="homepage">

          要檢測瀏覽器是否支持新類型,可以在 JavaScript 中創(chuàng)建 <input> 并設(shè)置 type 屬性,之后讀取它即可。老版本中會(huì)將我只類型設(shè)置為 text,而支持的會(huì)返回正確的值。如下所示:

          let input = document.createElement("input");
          input.type = "email";
          let isEmailSupported = (input.type == "email");

          數(shù)值范圍

          而上面介紹的幾個(gè)如 number/range/datetime/datetime-local/date/month/week/time 幾個(gè)填寫數(shù)字的類型,都可以指定 min/max/step 等幾個(gè)與數(shù)值有關(guān)的屬性。step 屬性用于規(guī)定合法數(shù)字間隔,如 step="2",則合法數(shù)字應(yīng)該為 0、2、4、6,依次類推。如下所示:

          <input type="number" min="0" max="100" step="5" name="count">

          上面的例子是<input>中只能輸入從 0 到 100 中 5 的倍數(shù)。

          也可以使用 stepUp()stepDown() 方法對 <input> 元素中的值進(jìn)行加減,它倆會(huì)接收一個(gè)可選參數(shù),用于表示加減的數(shù)值。如下所示:

          input.stepUp(); // 加1
          input.stepUp(5); // 加5
          input.stepDown(); // 減1
          input.stepDown(10); // 減10

          輸入模式

          HTML5 還為文本添加了 pattern 屬性,用于指定一個(gè)正則表達(dá)式。這樣就可以自己設(shè)置 <input> 元素的輸入模式了。如下所示:

          <input type="text" pattern="\d+" name="count">

          注意模式的開頭和末尾分別假設(shè)有^$。這意味著輸入內(nèi)容必須從頭到尾都嚴(yán)格與模式匹配。

          與新增的輸入類型一樣,指定 pattern 屬性也不會(huì)阻止用戶輸入無效內(nèi)容。模式會(huì)應(yīng)用到值,然后瀏覽器會(huì)知道值是否有效。通過訪問 pattern 屬性可以讀取模式:

          let pattern = document.forms[0].elements["count"].pattern;

          使用如下代碼可以檢測瀏覽器是否支持pattern 屬性:

          let isPatternSupported = "pattern" in document.createElement("input");

          檢測有效性

          HTML5 新增了 checkValidity() 方法,用來檢測表單中任意給定字段是否有效。而判斷的條件是約束條件,因此必填字段如果沒有值會(huì)被視為無效,字段值不匹配 pattern 屬性也會(huì)被視為無效。如下所示:

          if (document.forms[0].elements[0].checkValidity()){
              // 字段有效,繼續(xù)
          } else {
              // 字段無效
          }

          要檢查整個(gè)表單是否有效,可以直接在表單上調(diào)用checkValidity()方法。這個(gè)方法會(huì)在所有字段都有效時(shí)返回true,有一個(gè)字段無效就會(huì)返回false

          if(document.forms[0].checkValidity()){
              // 表單有效,繼續(xù)
          } else {
              // 表單無效
          }

          validity 屬性會(huì)返回一個(gè)ValidityState 對象,表示 <input> 元素的校驗(yàn)狀態(tài)。返回的對象包含一些列的布爾值的屬性:

          • customError:如果設(shè)置了 setCustomValidity() 就返回 true,否則返回false。
          • patternMismatch:如果字段值不匹配指定的 pattern 屬性則返回true。
          • rangeOverflow:如果字段值大于 max 的值則返回true。
          • rangeUnderflow:如果字段值小于 min 的值則返回true。
          • stepMisMatch:如果字段值與 minmaxstep 的值不相符則返回true。
          • tooLong:如果字段值的長度超過了 maxlength 屬性指定的值則返回true。
          • typeMismatch:如果字段值不是 "email""url" 要求的格式則返回true。
          • valid:如果其他所有屬性的值都為false 則返回true。與checkValidity()的條件一致。
          • valueMissing:如果字段是必填的但沒有值則返回true。

          因此,通過 validity 屬性可以檢查表單字段的有效性,從而獲取更具體的信息,如下所示:

          if (input.validity && !input.validity.valid){
              if (input.validity.valueMissing){
                  console.log("請指定值.")
              } else if (input.validity.typeMismatch){
                  console.log("請指定電子郵件地址.");
              } else {
                  console.log("值無效.");
              }
          }

          禁用驗(yàn)證

          通過指定 novalidate 屬性可以禁止對表單進(jìn)行任何驗(yàn)證:

          <form method="post" action="/signup" novalidate>
              <!-- 表單元素 -->
          </form>

          也可以在 JavaScript 通過 noValidate 屬性設(shè)置,為 true 表示屬性存在,為 false 表示屬性不存在:

          document.forms[0].noValidate = true; // 關(guān)閉驗(yàn)證

          如果一個(gè)表單中有多個(gè)提交按鈕,那么可以給特定的提交按鈕添加formnovalidate 屬性,指定通過該按鈕無需驗(yàn)證即可提交表單:

          <form method="post" action="/foo">
              <!-- 表單元素 -->
              <input type="submit" value="注冊提交">
              <input type="submit" formnovalidate name="btnNoValidate"
          value="沒有驗(yàn)證的提交按鈕">
          </form>

          也可以使用 JavaScript 設(shè)置 formNoValidate 屬性:

          // 關(guān)閉驗(yàn)證
          document.forms[0].elements["btnNoValidate"].formNoValidate = true;

          總結(jié)

          以上總結(jié)了 <input><textarea> 兩個(gè)元素的一些功能,主要是 <input> 元素可以通過設(shè)置 type 屬性獲取不同類型的輸入框,可以通過監(jiān)聽鍵盤事件并檢測要插入的字符來控制文本框的內(nèi)容。

          還有一些與剪貼板相關(guān)的事件,并對剪貼的內(nèi)容進(jìn)行檢測。還介紹了一些 HTML5 新增的屬性和方法和新增的更多的 <input> 元素的類型,和一些與驗(yàn)證相關(guān)的屬性和方法。

          文本標(biāo)記語言(英語:HyperText Markup Language,簡稱:HTML)是一種用于創(chuàng)建網(wǎng)頁的標(biāo)準(zhǔn)標(biāo)記語言。HTML是一種基礎(chǔ)技術(shù),常與CSS、JavaScript一起被眾多網(wǎng)站用于設(shè)計(jì)令人賞心悅目的網(wǎng)頁、網(wǎng)頁應(yīng)用程序以及移動(dòng)應(yīng)用程序的用戶界面。網(wǎng)頁瀏覽器可以讀取HTML文件,并將其渲染成可視化網(wǎng)頁。HTML描述了一個(gè)網(wǎng)站的結(jié)構(gòu)語義隨著線索的呈現(xiàn),使之成為一種標(biāo)記語言而非編程語言。

          HTML元素是構(gòu)建網(wǎng)站的基石。HTML允許嵌入圖像與對象,并且可以用于創(chuàng)建交互式表單,它被用來結(jié)構(gòu)化信息——例如標(biāo)題、段落和列表等等,也可用來在一定程度上描述文檔的外觀和語義。HTML的語言形式為尖括號包圍的HTML元素(如<html>),瀏覽器使用HTML標(biāo)簽和腳本來詮釋網(wǎng)頁內(nèi)容,但不會(huì)將它們顯示在頁面上。

          HTML可以嵌入如JavaScript的腳本語言,它們會(huì)影響HTML網(wǎng)頁的行為。網(wǎng)頁瀏覽器也可以引用層疊樣式表(CSS)來定義文本和其它元素的外觀與布局。維護(hù)HTML和CSS標(biāo)準(zhǔn)的組織萬維網(wǎng)聯(lián)盟(W3C)鼓勵(lì)人們使用CSS替代一些用于表現(xiàn)的HTML元素。

          歷史

          W3C制作的早期HTML標(biāo)志

          發(fā)展

          蒂姆·伯納斯-李

          1980年,物理學(xué)家蒂姆·伯納斯-李在歐洲核子研究中心(CERN)在承包工程期間,為使CERN的研究人員使用并共享文檔,他提出并創(chuàng)建原型系統(tǒng)ENQUIRE。1989年,伯納斯-李在一份備忘錄中提出一個(gè)基于互聯(lián)網(wǎng)的超文本系統(tǒng)。他規(guī)定HTML并在1990年底寫出瀏覽器和服務(wù)器軟件。同年,伯納斯-李與CERN的數(shù)據(jù)系統(tǒng)工程師羅伯特·卡里奧聯(lián)合為項(xiàng)目申請資助,但未被CERN正式批準(zhǔn)。在他的個(gè)人筆記中伯納斯-李列舉“一些使用超文本的領(lǐng)域”,并把百科全書列為首位。

          HTML的首個(gè)公開描述出現(xiàn)于一個(gè)名為“HTML標(biāo)簽”的文件中,由蒂姆·伯納斯-李于1991年底提及。它描述18個(gè)元素,包括HTML初始的、相對簡單的設(shè)計(jì)。除了超鏈接標(biāo)簽外,其他設(shè)計(jì)都深受CERN內(nèi)部一個(gè)以標(biāo)準(zhǔn)通用標(biāo)記語言(SGML)為基礎(chǔ)的文件格式SGMLguid的影響。這些元素在HTML 4中仍有11個(gè)存在。

          伯納斯-李認(rèn)為HTML是SGML的一個(gè)應(yīng)用程序。1993年中期互聯(lián)網(wǎng)工程任務(wù)組(IETF)發(fā)布首個(gè)HTML規(guī)范的提案:“超文本標(biāo)記語言(HTML)”互聯(lián)網(wǎng)草案,由伯納斯-李與丹·康納利(英語:Dan Connolly (computer scientist))撰寫。其中包括一個(gè)SGML文檔類型定義來定義語法。草案于6個(gè)月后過期,不過值得注意的是其對NCSA Mosaic瀏覽器自定義標(biāo)簽從而將在線圖像嵌入的行為的認(rèn)可,這反映IETF把標(biāo)準(zhǔn)立足于成功原型的理念。同樣,戴夫·拉格特(英語:Dave Raggett)在1993年末提出的與之競爭的互聯(lián)網(wǎng)草案“HTML+(超文本標(biāo)記格式)”建議規(guī)范已經(jīng)實(shí)現(xiàn)的功能,如表格與填寫表單。

          在HTML和HTML+的草案于1994年初到期后,IETF創(chuàng)建一個(gè)HTML工作組,并在1995年完成"HTML 2.0",這是第一個(gè)旨在成為對其后續(xù)實(shí)現(xiàn)標(biāo)準(zhǔn)的依據(jù)的HTML規(guī)范。

          在IETF的主持下,HTML標(biāo)準(zhǔn)的進(jìn)一步發(fā)展因競爭利益而遭受停滯。自1996年起,HTML規(guī)范一直由萬維網(wǎng)聯(lián)盟(W3C)維護(hù),并由商業(yè)軟件廠商出資。不過在2000年,HTML也成為國際標(biāo)準(zhǔn)(ISO/ IEC15445:2000)。HTML 4.01于1999年末發(fā)布,進(jìn)一步的勘誤版本于2001年發(fā)布。2004年,網(wǎng)頁超文本應(yīng)用技術(shù)工作小組(WHATWG)開始開發(fā)HTML5,并在2008年與W3C共同交付,2014年10月28日完成標(biāo)準(zhǔn)化。

          版本時(shí)間線

          1995年11月24日

          HTML 2.0作為IETF RFC 1866發(fā)布。追加RFC的附加功能:

          1995年11月25日:RFC 1867(基于表單的文件上傳)

          1996年5月:RFC 1942(表格)

          1996年8月:RFC 1980(客戶端圖像映射)

          1997年1月:RFC 2070(國際化)

          1997年1月14日

          HTML 3.2作為W3C推薦標(biāo)準(zhǔn)發(fā)布。這是首個(gè)完全由W3C開發(fā)并標(biāo)準(zhǔn)化的版本,因IETF于1996年9月12日關(guān)閉它的HTML工作組。

          最初代號為“威爾伯”(Wilbur),HTML 3.2完全去除數(shù)學(xué)公式,協(xié)調(diào)各種專有擴(kuò)展,并采用網(wǎng)景設(shè)計(jì)的大多數(shù)視覺標(biāo)記標(biāo)簽。由于兩家公司達(dá)成了協(xié)議,網(wǎng)景的閃爍元素(英語:blink element)和微軟的滾動(dòng)元素(英語:marquee element)被移除。HTML對數(shù)學(xué)公式的支持最后成為另外一種被稱為MathML的標(biāo)準(zhǔn)。

          1997年12月18日

          HTML 4.0作為W3C推薦標(biāo)準(zhǔn)發(fā)布。它提供三種變化:

          嚴(yán)格,過時(shí)的元素被禁止。

          過渡,過時(shí)的元素被允許。

          框架集,大多只與框架相關(guān)的元素被允許。

          最初代號“美洲獅”(Cougar), HTML 4.0采用許多特定瀏覽器的元素類型和屬性,并試圖淘汰網(wǎng)景的視覺標(biāo)記功能,將其標(biāo)記為不贊成使用。HTML 4是遵循ISO 8879 - SGML的SGML應(yīng)用程序。

          1998年4月24日

          HTML 4.0進(jìn)行微調(diào),不增加版本號。

          1999年12月24日

          HTML 4.01作為W3C推薦標(biāo)準(zhǔn)發(fā)布。它同樣提供三種變化,最終勘誤版于2001年5月12日發(fā)布。

          2000年5月

          ISO/IEC 15445:2000("ISO HTML",基于HTML 4.01嚴(yán)格版)作為ISO/IEC國際標(biāo)準(zhǔn)發(fā)布。在ISO中這一標(biāo)準(zhǔn)位于ISO/IEC JTC 1/SC 34(英語:ISO/IEC JTC 1/SC 34)域(ISO/IEC聯(lián)合技術(shù)委員會(huì)1、小組委員會(huì)34 – 文檔描述與處理語言)。

          2014年10月28日

          HTML 5作為W3C推薦標(biāo)準(zhǔn)發(fā)布。

          草案時(shí)間線

          HTML5的Logo

          1991年10月

          HTML標(biāo)簽,一個(gè)非正式CERN文件首次公開18個(gè)HTML標(biāo)簽。

          1992年6月

          HTML DTD的首個(gè)非正式草案, 后續(xù)有七個(gè)修訂版(7月15日,8月6日,8月18日,11月17日,11月19日,11月20日,11月22日)。

          1992年11月

          HTML DTD 1.1(首個(gè)版本號,基于RCS修訂版,版本號從1.1開始而非1.0),非正式草案。

          1993年6月

          超文本標(biāo)記語言由IETF IIIR工作小組作為互聯(lián)網(wǎng)草案(一個(gè)粗略的建議標(biāo)準(zhǔn))。在被第二版代一個(gè)月后,IETF又發(fā)布6個(gè)草案,最終在RFC1866中發(fā)布HTML 2.0。

          1993年11月

          HTML+由IETF作為互聯(lián)網(wǎng)草案發(fā)布,是超文本標(biāo)記語言草案的一個(gè)競爭性提案。它于1994年5月到期。

          1995年4月 (1995年3月編寫)

          HTML 3.0[33]被提議作為IETF的標(biāo)準(zhǔn),但直到提案在五個(gè)月過期后(1995年9月28日)仍沒有進(jìn)一步的行動(dòng)。它包含許多拉格特HTML+提案的功能,如對表格的支持、圍繞數(shù)據(jù)的文本流和復(fù)雜的數(shù)學(xué)公式的顯示。W3C開始開發(fā)自己的Arena瀏覽器作為HTML 3和層疊樣式表的試驗(yàn)臺(英語:Test bed),但HTML 3.0并沒有獲得成功。瀏覽器廠商,包括微軟和網(wǎng)景,選擇實(shí)現(xiàn)HTML3草案功能的不同子集并引入它們自己的插件(見瀏覽器大戰(zhàn))。

          2008年1月

          HTML5由W3C作為工作草案(鏈接)發(fā)布。雖然HTML5的語法非常類似于SGML,但它已經(jīng)放棄任何成為SGML應(yīng)用程序的嘗試,除了一種替代的基于XML的HTML5序列,它已明確定義自己的“HTML”序列。

          2011年 HTML5 – 最終征求

          2011年5月,工作小組將HTML5推進(jìn)至“最終征求”(Last Call)階段,邀請W3C社區(qū)內(nèi)外人士以確認(rèn)本規(guī)范的技術(shù)可靠性。W3C開發(fā)一套綜合性測試套件來實(shí)現(xiàn)完整規(guī)范的廣泛交互操作性,完整規(guī)范的目標(biāo)日期為2014年。2011年1月,WHATWG將其“HTML5”活動(dòng)標(biāo)準(zhǔn)重命名為“HTML”。W3C仍然繼續(xù)其發(fā)布HTML5的項(xiàng)目。

          2012年 HTML5 – 候選推薦

          2012年7月,WHATWG和W3C的工作產(chǎn)生一定程度的分離。W3C繼續(xù)HTML5規(guī)范工作,重點(diǎn)放在單一明確的標(biāo)準(zhǔn)上,這被WHATWG稱為“快照”。WHATWG組織則將HTML5作為一個(gè)“活動(dòng)標(biāo)準(zhǔn)”(Living Standard)。活動(dòng)標(biāo)準(zhǔn)的概念是從未完成但永遠(yuǎn)保持更新與改進(jìn),可以添加新特性,但功能點(diǎn)不會(huì)被刪除。

          2012年12月,W3C指定HTML5作為候選推薦階段。 該階段的標(biāo)準(zhǔn)為“兩個(gè)100%完成,完全實(shí)現(xiàn)交互操作”。

          2014年 HTML5 – 提案推薦與推薦

          2014年9月,HTML5進(jìn)入提案推薦階段。

          2014年10月28日,HTML5作為穩(wěn)定W3C推薦標(biāo)準(zhǔn)發(fā)布,這意味著HTML5的標(biāo)準(zhǔn)化已經(jīng)完成。

          XHTML版本

          XHTML是使用XML 1.0改寫自HTML 4.01的獨(dú)立語言。它不再被作為單獨(dú)標(biāo)準(zhǔn)開發(fā)。

          XHTML 1.0, 2000年1月26日作為W3C推薦標(biāo)準(zhǔn)發(fā)布。修訂版于2002年8月1日發(fā)布,它提供與HTML 4.0和4.01相同的三個(gè)變化,這些變化被重新在XML中制定。

          XHTML 1.1,基于XHTML 1.0 嚴(yán)格版,2001年5月31日 作為W3C推薦標(biāo)準(zhǔn)發(fā)布。修訂版可使用模塊化XHTML的模塊,2001年4月10日作為W3C推薦標(biāo)準(zhǔn)發(fā)布。

          XHTML 2.0為工作草案,但為支持HTML5與XHTML5的工作,此草案被放棄。 XHTML 2.0與XHTML 1.x不兼容,因此更確切的說這是一個(gè)XHTML風(fēng)格的新語言而不是XHTML 1.x的更新。

          在HTML5草案中規(guī)定一個(gè)XHTML語法,稱為“XHTML5.1”。

          標(biāo)記

          HTML標(biāo)記包含標(biāo)簽(及其屬性)、基于字符的數(shù)據(jù)類型、字符引用和實(shí)體引用等幾個(gè)關(guān)鍵部分。HTML標(biāo)簽是最常見的,通常成對出現(xiàn),比如<h1>與</h1>。這些成對出現(xiàn)的標(biāo)簽中,第一個(gè)標(biāo)簽是開始標(biāo)簽,第二個(gè)標(biāo)簽是結(jié)束標(biāo)簽。兩個(gè)標(biāo)簽之間為元素的內(nèi)容,有些標(biāo)簽沒有內(nèi)容,為空元素,如<img>。

          HTML另一個(gè)重要組成部分為文檔類型聲明(英語:document type declaration),這會(huì)觸發(fā)標(biāo)準(zhǔn)模式渲染。

          以下是一個(gè)經(jīng)典的Hello World程序的例子:

          <!DOCTYPE html>

          <html>

          <head>

          <title>This is a title</title>

          </head>

          <body>

          <p>Hello world!</p>

          </body>

          </html>

          <html>和</html>之間的文本描述網(wǎng)頁,<body>和</body>之間的文本為可視頁面內(nèi)容。標(biāo)記文本<title>This is a title</title>定義了瀏覽器的頁面標(biāo)題。

          文檔標(biāo)記類型<!DOCTYPE html>用于HTML5。 如果未進(jìn)行聲明,瀏覽器會(huì)使用“怪異模式”進(jìn)行渲染。

          元素

          HTML文檔由嵌套的HTML元素構(gòu)成。它們用HTML標(biāo)簽表示,包含于尖括號中,如<p>

          在一般情況下,一個(gè)元素由一對標(biāo)簽表示:“開始標(biāo)簽”<p>與“結(jié)束標(biāo)簽”</p>。元素如果含有文本內(nèi)容,就被放置在這些標(biāo)簽之間。

          在開始與結(jié)束標(biāo)簽之間也可以封裝另外的標(biāo)簽,包括標(biāo)簽與文本的混合。這些嵌套元素是父元素的子元素。

          開始標(biāo)簽也可包含標(biāo)簽屬性。這些屬性有諸如標(biāo)識文檔區(qū)段、將樣式信息綁定到文檔演示和為一些如<img>等的標(biāo)簽嵌入圖像、引用圖像來源等作用。

          一些元素如換行符<br>,不允許嵌入任何內(nèi)容,無論是文字或其他標(biāo)簽。這些元素只需一個(gè)單一的空標(biāo)簽(類似于一個(gè)開始標(biāo)簽),無需結(jié)束標(biāo)簽。

          許多標(biāo)簽是可選的,尤其是那些很常用的段落元素<p>的閉合端標(biāo)簽。HTML瀏覽器或其他媒介可以從上下文識別出元素的閉合端以及由HTML標(biāo)準(zhǔn)所定義的結(jié)構(gòu)規(guī)則。這些規(guī)則非常復(fù)雜,不是大多數(shù)HTML編碼人員可以完全理解的。

          因此,一個(gè)HTML元素的一般形式為:<tag attribute1="value1" attribute2="value2">''content''</tag>。一些HTML元素被定義為空元素,其形式為<tag attribute1="value1" attribute2="value2">。空元素不能封裝任何內(nèi)容。例如<br>標(biāo)簽或內(nèi)聯(lián)標(biāo)簽<img>。一個(gè)HTML元素的名稱即為標(biāo)簽使用的名稱。注意,結(jié)束標(biāo)簽的名稱前面有一個(gè)斜杠“/”,空元素不需要也不允許結(jié)束標(biāo)簽。如果元素屬性未標(biāo)明,則使用其默認(rèn)值。

          例子

          HTML文檔的頁眉:<head>...</head>。標(biāo)題被包含在頭部,例如:

          <head>

          <title>The Title</title>

          </head>

          標(biāo)題:HTML標(biāo)題由<h1>到<h6>六個(gè)標(biāo)簽構(gòu)成,字體由大到小遞減:

          <h1>Heading level 1</h1>

          <h2>Heading level 2</h2>

          <h3>Heading level 3</h3>

          <h4>Heading level 4</h4>

          <h5>Heading level 5</h5>

          <h6>Heading level 6</h6>

          段落:

          <p>第一段</p> <p>第二段</p>

          換行:<br>。<br>與<p>之間的差異是br換行但不改變頁面的語義結(jié)構(gòu),而p部分的頁面成段。

          <p>這是<br>一個(gè)<br>使用換行<br>段落</p>

          鏈接:使用<a>標(biāo)簽來創(chuàng)建鏈接。href屬性包含鏈接的URL地址。

          <a >中文維基百科的連結(jié)!</a>

          注釋:

          <!-- This is a comment -->

          注釋有助于理解標(biāo)記,但它不會(huì)在網(wǎng)頁上顯示。

          HTML中存在以下幾種類型的標(biāo)記元素:

          用于文本的結(jié)構(gòu)式標(biāo)記

          例如,<h2>羽毛球</h2>將“羽毛球”定義為二級標(biāo)題。結(jié)構(gòu)式標(biāo)記不指示任何特定的渲染,但大多數(shù)網(wǎng)頁瀏覽器都會(huì)采用元素格式的默認(rèn)樣式。要在內(nèi)容上實(shí)現(xiàn)進(jìn)一步的風(fēng)格可以使用層疊樣式表(CSS)。

          用于文本外觀的表現(xiàn)式標(biāo)記,不論其目的

          例如,<b>粗體</b>表示視覺輸出設(shè)備應(yīng)將文本“粗體”加粗,但如果設(shè)備無法做到這一點(diǎn)(如朗讀文本的聽覺設(shè)備),就不會(huì)發(fā)生什么現(xiàn)象。在這種情況下,<b>粗體</b>與''斜體''也可能有相同的視覺效果,但在本質(zhì)上它們更加語義化。如同<strong>加強(qiáng)文字</strong>與<em>強(qiáng)調(diào)文字</em>的區(qū)別。為支持CSS的使用,大多數(shù)表現(xiàn)式標(biāo)記在HTML 4.0規(guī)范中不再被推薦使用。

          超文本標(biāo)記使文檔的一部分鏈接到其他文檔

          錨元素在文檔中創(chuàng)建超鏈接,其href屬性設(shè)置鏈接的目標(biāo)URL。例如:HTML標(biāo)記<a 渲染為超鏈接。要將圖片渲染為超鏈接,img元素要作為內(nèi)容插入到a元素中:<a ><img src="image.gif" alt="說明文字" width="50" height="50" border="0"></a>。

          屬性

          大多數(shù)元素的屬性以“名稱-值”的形式成對出現(xiàn),由“=”分離并寫在開始標(biāo)簽元素名之后。值一般由單引號或雙引號包圍,有些值的內(nèi)容包含特定字符,在HTML中可以去掉引號(XHTML不行)。不加引號的屬性值被認(rèn)為是不安全的[58]。有些屬性無需成對出現(xiàn),僅存在于開始標(biāo)簽中即可影響元素[6],如img 元素的ismap 屬性。

          許多元素存在一些共通的屬性:

          id屬性為元素提供了在全文檔內(nèi)的唯一標(biāo)識。它用于識別元素,以便樣式表可以改變其表現(xiàn)屬性,腳本可以改變、顯示或刪除其內(nèi)容或格式化。對于添加到頁面的URL,它為元素提供了一個(gè)全局唯一標(biāo)識,通常為頁面的子章節(jié)。例如,ID "屬性"對于https://zh.wikipedia.org/wiki/HTML#屬性

          class屬性提供一種將類似元素分類的方式。常被用于語義化或格式化。例如,一個(gè)HTML文檔可指定類<class="標(biāo)記">來表明所有具有這一類值的元素都從屬于文檔的主文本。格式化后,這樣的元素可能會(huì)聚集在一起,并作為頁面腳注而不會(huì)出現(xiàn)在HTML代碼中。類屬性也被用于微格式的語義化。類值也可進(jìn)行多聲明。如<class="標(biāo)記 重要">將元素同時(shí)放入標(biāo)記與重要兩類中。

          style屬性可以將表現(xiàn)性質(zhì)賦予一個(gè)特定元素。比起使用id或class 屬性從樣式表中選擇元素,“style”被認(rèn)為是一個(gè)更好的做法,盡管有時(shí)這對一個(gè)簡單、專用或特別的樣式顯得太繁瑣。

          title屬性用于給元素一個(gè)附加的說明。 大多數(shù)瀏覽器中這一屬性顯示為工具提示(英語:Tooltip)。

          lang屬性用于識別元素內(nèi)容的語言,它可能與文檔的主要語言不同。例如,在中文文檔中:

          <p>法語<span lang="fr">c'est la vie</span>在法國的應(yīng)用很普遍,意為“這就是生活” 。<p>

          縮寫元素abbr可用于說明一些屬性:

          <abbr id="ID" class="術(shù)語" style="color:purple;" title="超文本標(biāo)記語言">HTML</abbr>

          這個(gè)例子顯示為HTML; 在大多數(shù)瀏覽器中,光標(biāo)指向縮寫時(shí)會(huì)顯示標(biāo)題文字“超文本標(biāo)記語言”。

          大多數(shù)元素采用與語言相關(guān)的屬性dir 來指定文字方向,如 "rtl"采用從右到左的文本,比如阿拉伯語、波斯語以及希伯來語。

          字符與實(shí)體引用

          參見:XML與HTML字符實(shí)體引用列表和Unicode與HTML

          在4.0版本中,HTML定義了一系列共252個(gè)字符實(shí)體引用和1,114,050個(gè)字元值參考。二者都支持單個(gè)字符通過簡單的標(biāo)記寫入。文字字符與其對應(yīng)的標(biāo)記渲染的效果相同。

          用這種方式“轉(zhuǎn)義”字符的能力允許字符<與&(當(dāng)分別被寫作<和&時(shí))被理解為字符數(shù)據(jù)而不是標(biāo)記。例如<通常為標(biāo)簽的開頭,&通常為字符實(shí)體引用與數(shù)字字符引用的開頭;&或&或&將&作為元素的內(nèi)容或?qū)傩缘闹怠kp引號字符"在不被用于屬性值的標(biāo)示時(shí)必須轉(zhuǎn)義為"或"或";相等地,當(dāng)于單引號字符'不被用于屬性值的標(biāo)示時(shí),也必須轉(zhuǎn)義為'或'(或HTML5與XHTML文檔中的')。

          如果文檔作者忽略了轉(zhuǎn)義這樣的字符,一些瀏覽器會(huì)嘗試通過上下文猜測他們的意圖。如果結(jié)果仍為無效標(biāo)記,這會(huì)使其他瀏覽器或用戶代理難以訪問到該文檔,并使它們嘗試使用搜索和索引來解析該文檔。

          那些難以輸入或不在該文檔字符編碼中的字符也可通過轉(zhuǎn)義來實(shí)現(xiàn)。例如通常只在西歐或南美的鍵盤出現(xiàn)的重音符e(é),可以在HTML文檔中用作實(shí)體引用é 或數(shù)字引用é或é。 諸如UTF-8的Unicode字符編碼與所有的現(xiàn)代瀏覽器兼容并允許直接訪問全球書寫系統(tǒng)幾乎所有的字符 。

          數(shù)據(jù)類型

          HTML為元素內(nèi)容定義了多種數(shù)據(jù)類型,如腳本數(shù)據(jù)、樣式表數(shù)據(jù)以及許多屬性值的類型,包括ID、名稱、URI、數(shù)字長度單位、語言、媒體描述符顏色、字符編碼、日期和時(shí)間等等。所有這些數(shù)據(jù)類型都是字符數(shù)據(jù)的特殊化。

          文檔類型聲明

          HTML文檔需要以文檔類型聲明(英語:document type declaration)(英語非正式說法“doctype”)開頭。在瀏覽器中,文檔類型聲明有助于確定渲染模式——特別是是否使用怪異模式。

          文檔類型聲明的初衷是通過基于文檔類型定義(DTD)的SGML工具來解析并驗(yàn)證HTML文檔。

          HTML5未定義DTD,所以在HTML5中文檔類型聲明更為簡短:

          <!DOCTYPE html>

          HTML 4文檔類型聲明舉例:

          <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">

          該聲明引用HTML 4.01“嚴(yán)格”版的DTD。基于SGML的驗(yàn)證器可讀取DTD,正確解析這些文檔并執(zhí)行驗(yàn)證。在現(xiàn)代瀏覽器中,一個(gè)有效的文檔類型激活標(biāo)準(zhǔn)模式有別于怪異模式。

          另外,HTML 4.01提供過渡型與框架集型的DTD。過渡型涵蓋最廣,它可整合當(dāng)前以及老舊或“過時(shí)”的標(biāo)簽,而嚴(yán)格型DTD排除了過時(shí)的標(biāo)簽。框架集擁有所有構(gòu)建框架所需的標(biāo)簽以及過渡型的標(biāo)簽。

          語義化HTML

          語義化HTML是一種編寫HTML的方式,它強(qiáng)調(diào)編碼信息的含義在其格式(樣子)之上。HTML從創(chuàng)立之初就包括語義化標(biāo)記,但也包括標(biāo)識性標(biāo)記如<font>、<i>和<center>標(biāo)簽。也存在一些語義上中立的span與div標(biāo)簽。自1990年代末層疊樣式表開始應(yīng)用于大多數(shù)瀏覽器,網(wǎng)頁制作者就被鼓勵(lì)使用CSS以便呈現(xiàn)與內(nèi)容分離。

          在2001年一次對語義網(wǎng)的討論中,蒂姆·伯納斯-李等人給出了一種的方法,使智能軟件“代理人”可能有一天會(huì)自動(dòng)抓取網(wǎng)頁進(jìn)行查找、過濾并將之前不相關(guān)的聯(lián)系起來。這種代理甚至在現(xiàn)在也不普遍,但一些Web 2.0、混搭和價(jià)格比較網(wǎng)站的想法可能會(huì)結(jié)束。這些網(wǎng)頁應(yīng)用程序的混合與伯納斯-李的語義代理人的之間主要區(qū)別基于以下事實(shí):當(dāng)前的聚合與信息混合通常由網(wǎng)頁開發(fā)者設(shè)計(jì),他們早已知道網(wǎng)絡(luò)位置和他們希望混搭、比較與結(jié)合的特定數(shù)據(jù)的API語義。

          網(wǎng)頁代理的一個(gè)重要類型是網(wǎng)絡(luò)爬蟲或搜索引擎蜘蛛。這些軟件代理依賴于它們發(fā)現(xiàn)的網(wǎng)頁的語義清晰度,因?yàn)樗鼈円惶煲褂酶鞣N技術(shù)與算法來讀取和索引數(shù)百萬個(gè)網(wǎng)頁并給網(wǎng)頁用戶提供搜索工具,沒有這些萬維網(wǎng)的有效性就會(huì)大大降低。

          為使搜索引擎蜘蛛評估它們在HTML文檔中發(fā)現(xiàn)的文本片段的重要性,也為那些創(chuàng)建標(biāo)記等混合的人與更多的自動(dòng)化代理工具,HTML中的語義結(jié)構(gòu)需要廣泛一致地應(yīng)用從而將文本的含義呈現(xiàn)給瀏覽者。

          表示性標(biāo)記在當(dāng)前的HTML和XHTML推薦中不被鼓勵(lì)使用,HTML5中則被視為非法。

          好的語義化HTML也改善了網(wǎng)頁文檔的可訪問性。例如,當(dāng)屏幕閱讀器或音頻瀏覽器可以正確判定一個(gè)文檔的結(jié)構(gòu)時(shí),視覺障礙用戶不會(huì)再因閱讀重復(fù)或無關(guān)的信息而浪費(fèi)時(shí)間。

          分發(fā)

          HTML文檔分發(fā)的方法和其他計(jì)算機(jī)文件相同。不過,它們最常通過網(wǎng)頁服務(wù)器的超文本傳輸協(xié)議或電子郵件傳輸。

          HTTP

          萬維網(wǎng)主要由從服務(wù)器通過HTTP協(xié)議向?yàn)g覽器發(fā)送的HTML文檔組成。但是,HTTP也可以被用于傳輸HTML之外的數(shù)據(jù),例如圖像、聲音和其他內(nèi)容。為使瀏覽器了解如何處理接收到的文檔,在傳輸文檔時(shí)必須同時(shí)傳遞文件類型。這種元數(shù)據(jù)包含MIME類型(對于HTML 4.01或更早版本是text/html,而對于XHTML 1.0或之后的版本是application/xhtml+xml),以及字符編碼(參見HTML字符編碼方式)。

          在現(xiàn)在的瀏覽器中,和HTML文檔一起發(fā)送的MIME類型影響文檔的解讀方式。和XHTML MIME類型一起發(fā)送的文檔被認(rèn)為是良構(gòu)的XML,而語法錯(cuò)誤會(huì)導(dǎo)致瀏覽器無法呈現(xiàn)文檔。完全相同的文檔如果和HTML MIME類型一起發(fā)送,則可能被正常顯示,因?yàn)闉g覽器對HTML的語法檢查更加松懈些。

          W3C的推薦指出,遵循規(guī)定的推薦指引的XHTML 1.0文檔可標(biāo)記二者任一的MIME類型。XHTML 1.1還指出,XHTML 1.1文檔應(yīng)標(biāo)有兩種MIME類型。

          HTML郵件

          大多數(shù)圖形電子郵件客戶端允許使用HTML的子集(經(jīng)常界限不清)提供格式化和無法使用純文本的語義標(biāo)記。這可能包括印刷信息,如彩色標(biāo)題、強(qiáng)調(diào)和引用文本、內(nèi)嵌圖片和圖表等。許多這樣的客戶包含一個(gè)編寫HTML電子郵件消息的圖形用戶界面編輯器和一個(gè)用于顯示的渲染引擎。在郵件中使用HTML受到了一些兼容性的批評,由于一些盲人或具有視覺障礙的人的訪問問題,這種方式有利于偽裝的釣魚攻擊。因其消息大小超過明文,所以它可混淆垃圾郵件過濾器。

          命名規(guī)則

          最常用的計(jì)算機(jī)文件擴(kuò)展名為.html,通用縮寫為.htm。它起源于某些早期操作系統(tǒng)與文件系統(tǒng),如DOS以及FAT數(shù)據(jù)結(jié)構(gòu)的局限性,它將文件擴(kuò)展名限制為3個(gè)字母。

          HTML應(yīng)用程序

          HTML應(yīng)用程序(HTA;文件擴(kuò)展名".hta")是一個(gè)Microsoft Windows應(yīng)用程序,它在瀏覽器中使用HTML和動(dòng)態(tài)HTML提供應(yīng)用程序圖形界面。正規(guī)HTML文件被限制在瀏覽器的安全模型中,只能分別通過網(wǎng)頁服務(wù)器和網(wǎng)頁對象與站點(diǎn)Cookie進(jìn)行通信和操作。HTA作為完全受信任的應(yīng)用程序運(yùn)行,因此擁有更多的權(quán)限,如創(chuàng)建/編輯/刪除文件與注冊表項(xiàng)。因?yàn)樗鼈冊跒g覽器安全模式之外操作,所以HTA不能通過HTTP執(zhí)行,必須下載(就像EXE文件)并在本地文件系統(tǒng)執(zhí)行。

          所見即所得編輯器

          所見即所得編輯器使用圖形用戶界面(GUI)顯示HTML文檔,常常類似于文字處理器,所以用戶可以設(shè)計(jì)一切。編者面對的是文檔,而不是代碼,所以作者并不需要太多的HTML知識。這種所見即所得的編輯模式一直受到詬病,主要因?yàn)樗傻拇a質(zhì)量不高;也有人主張將其改變至WYSIWYM模型(所見即所指)。


          主站蜘蛛池模板: 国产成人精品无码一区二区老年人| 国产一区二区三区播放| 无码精品久久一区二区三区| 精品亚洲A∨无码一区二区三区| 欧美日韩精品一区二区在线视频 | 激情一区二区三区| 日本丰满少妇一区二区三区| 免费无码A片一区二三区| bt7086福利一区国产| 蜜臀AV一区二区| 无码人妻精品一区二区三区久久 | 亚洲毛片不卡av在线播放一区| 伊人久久一区二区三区无码| 中文字幕一区二区三区5566| 亚洲国产一区二区三区青草影视 | 日韩免费无码视频一区二区三区| 久久国产精品免费一区| 国产免费一区二区三区免费视频 | 国产精品制服丝袜一区| 精品无人区一区二区三区在线 | 日本一区二区在线不卡| 国产福利日本一区二区三区| 一本一道波多野结衣一区| 国产精品视频一区二区三区经| 国产精品一区二区久久| 亚洲AV成人精品日韩一区| 欧美日韩一区二区成人午夜电影| 成人H动漫精品一区二区| 精品无码国产AV一区二区三区| 精品无码国产一区二区三区麻豆| 国产麻豆剧果冻传媒一区| 激情爆乳一区二区三区| 91福利国产在线观看一区二区| 久久久久一区二区三区| 91久久精品国产免费一区| 国产精品久久久久久一区二区三区| 国产凸凹视频一区二区| 国产凹凸在线一区二区| 精品无码一区二区三区爱欲| 亚洲AV日韩综合一区| 一区二区三区观看|