2011-01-12 62 views
22

我只是驗證了我實際的XHTML嚴格1.0文檔與W3C驗證服務..它說,XHTML嚴格1.0 - 目標=「_空白」無效?

<ul id="socialnetwork"> 
      <li><a href="http://www.twitter.com" target="_blank"></a></li> 
      <li><a href="http://www.flickr.com" target="_blank"></a></li> 
      <li><a href="http://www.xing.com" target="_blank"></a></li> 
      <li><a href="http://www.rss.com" target="_blank"></a></li> 
</ul> 

目標=「_空白」是無效的..但我需要的靶坯因此新標籤將在瀏覽器中打開,以便用戶不離開主頁面。

我該怎麼辦?爲什麼這是無效的?

回答

15

你可能要檢查出W3常見問題:http://www.w3.org/MarkUp/2004/xhtml-faq#target

爲什麼目標屬性從XHTML 1.1去掉?

不是。 XHTML 1.0有三個版本:嚴格,過渡和框架集。所有這三個都是故意保持儘可能接近XML 4.01所允許的。 XHTML 1.1是XHTML 1.0 strict的更新版本,並且HTML嚴格版本都沒有包含目標屬性。另外兩個版本,過渡版和框架版未更新,因爲沒有更新。如果您要使用目標屬性,請使用XHTML 1.0 transitional。

+0

好吧,那麼我必須放棄Strict ..現在是它的過渡時間。 – Tomkay 2011-01-12 08:26:20

+4

在這種情況下,如何在沒有目標屬性且沒有JavaScript的情況下在新選項卡中打開鏈接? – user1886419 2013-09-16 19:26:36

+0

請不要試圖刪除這樣的有用答案。即使你已經完成了SO,他們仍然會受益於其他人。 – hvd 2014-06-07 00:34:22

1

雖然我不能說爲什麼這個屬性被認爲是無效的解決方法,你可以添加這個屬性與JavaScript,如果你想你的網站驗證爲XHTML Strict。

5

我建議不是加入目標屬性。它由於可訪問性原因而被丟棄,並且我不喜歡它在我的瀏覽器標籤如何打開的時候決定me。當然,如果你願意,你可以自由地這樣做。我將告訴你一個JavaScript方法達林上面提到允許您驗證作爲XHTML 1.0嚴格或XHTML 1.1:

HTML代碼:

<!-- Added link titles for better testing purposes --> 
<ul id="socialnetwork"> 
    <li><a href="http://www.twitter.com/" class="targetblank">Twitter</a></li> 
    <li><a href="http://www.flickr.com/" class="targetblank">Flickr</a></li> 
    <li><a href="http://www.xing.com/" class="targetblank">XING</a></li> 
    <li><a href="http://www.rss.com/" class="targetblank">RSS</a></li> 
</ul> 

JavaScript代碼:

window.onload = function() { 
    // Code if document.getElementByClassName() doesn't exist 
    if (document.getElementsByClassName == undefined) { 
     document.getElementsByClassName = function(className) { 
      var hasClassName = new RegExp("(?:^|\\s)" + className + "(?:$|\\s)"); 
      var allElements = document.getElementsByTagName("*"); 
      var results = []; 

      var element; 
      for (var i = 0; (element = allElements[i]) != null; i++) { 
       var elementClass = element.className; 
       if (elementClass && elementClass.indexOf(className) != -1 && hasClassName.test(elementClass)) 
        results.push(element); 
      } 

      return results; 
     } 
    } 

    var anchorList = document.getElementsByClassName('targetblank'); 
    for (var i in anchorList) { 
     anchorList[i].target = '_blank'; 
    } 
} 

當然,如果你已經在其他地方包含它,你可以省略window.onload,但是我建議使用它(或者使用其他的加載函數,比如JQuery的$(document).ready();),因此JavaScript在頁面加載完成時加載。現在,您需要做的就是爲每個錨鏈接指定一類「targetblank」,並且鏈接應該在新選項卡中打開。

3

對於這種情況,我使用了一個簡單的jQuery解決方案,使用XHTML Strict驗證它,並允許出現新的窗口。

<a href="http://www.example.com" class="linkExternal">Example URL</a> 

<script type="text/javascript"> 
$(function(){ 
    $('a.linkExternal').on('click',function(e){ 
     e.preventDefault(); 
     window.open($(this).attr('href')); 
    }); 
}); 
0

試試這個:

<a href="#" onclick="window.open('urlgoeshere');">Link</a> 
9

你應該問自己的問題不是如何「規避」的嚴格限制,但爲什麼你要在第一時間使用XHTML 1.0嚴格?

在你的情況下,我會簡單地使用Transitional作爲DTD。除非你正在開發一個特定的操作系統,例如不允許在汽車系統,手機或更具有異國情調的電器中打開多個窗口。順便說一句,在HTML Strict中沒有目標的原因。

但你似乎開發「正常」使用您的文檔類型應該反映這一點,你應該使用:

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

why was target removed from xhtml 歡呼見Ĵ

-1

我喜歡這個

<a href="http://myurl.com" onclick="this.target='_blank'">Anchor text</a> 
0

在XHTML STRICT中使用目標的最佳方式是:onclick="target='_blank';"

<a href="http://botje.tnhteam.com/" onclick="target='_blank';">Botje is overal</a> 

例子: click the STRICT button at the bottom

,如果你需要_self或任何其他的目標,您可以更改_blank於_self例如:onclick="target='_self';"

我希望這個答案是有幫助的一些你...