網頁標準:target 屬性怎麼用 JS 來控制?

來源:互聯網
上載者:User
js|標準|控制|網頁 在HTML 4.0 Strict和XHTML 1.0 STRICT裡不允許在<a>標籤裡使用target屬性,這是一件令網頁設計者懊惱的事.在過渡的規範裡還是允許使用的.但通過一定的方法,我們可以解決這一問題.

HTMl4.0規範裡拿掉了target屬性.但它添加了另外一個屬性:rel.這個屬性是用來指定包含連結的文檔和所連結文檔之間的關係的.規範裡定義了其屬性值(如:next,previous,chapter,section),在這些屬性裡大多數是用來定義一個大文檔裡各個小部分之間的關係的.事實上.規範裡允許開發人員自由的使用非標準屬性值做特定的運用.

在這裡,我們採用一個自訂值external用於rel屬性來標記一個連結,用來新開一個視窗.

不符合最新Web標準的連結代碼:
<a href="document.html" target="_blank">external link</a>

運用rel屬性:
<a href="document.html" rel="external">external link</a>

現在我們構建了一個符合Web標準的新開視窗的連結,我們還需要運用JavaScript是其實現新開視窗.指令碼要實現的工作是當網頁載入時,找到文檔裡的所有那些我們定義為rel="external"的超連結.

首先我們要判斷瀏覽器.
if (!document.getElementsByTagName) return;

getElementsByTagName是DOM1標準裡一個容易使用的方法,且它被現在的大多數瀏覽器所支援,因為一些舊的瀏覽器如Netscape 4和IE4不支援DOM1,所以我們必須通過判定這一方法是否存在來排除這些舊版本的瀏覽器.

下一步,我們通過getElementsByTagName方法取得文檔裡所有的<a>標籤:
var anchors = document.getElementsByTagName("a");

anchors被賦值為包含各個<a>標籤的數組,現在我們必須遍曆各個<a>標籤並且修改它:

for (var i=0; i < anchors.length; i++) {
var anchor = anchors;

找到要實現新開視窗的<a>標籤
if (anchor.getAttribute("href") &&
anchor.getAttribute("rel") == "external")
接下來.建立屬性值target並賦值"_target":
anchor.target = "_blank";

完整的代碼:
function externalLinks() {
if (!document.getElementsByTagName) return;
var anchors = document.getElementsByTagName("a");
for (var i=0; i<anchors.length; i++) {
var anchor = anchors;
if (anchor.getAttribute("href") &&
anchor.getAttribute("rel") == "external")
anchor.target = "_blank";
}
}
window.onload = externalLinks;

相關文章

Beyond APAC's No.1 Cloud

19.6% IaaS Market Share in Asia Pacific - Gartner IT Service report, 2018

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。