2011-01-12 8 views
22

ich meine eigentliche XHTML Strict 1.0 doc mit dem W3C Validator Service nur validiert .. und es sagt, dassXHTML Strict 1.0 - Ziel = "_ leer" nicht gültig?

<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> 

die target = "_ blank" ist nicht gültig .. aber ich brauche das Ziel leer, so eine neue Der Tab öffnet sich im Browser, so dass der Benutzer die Hauptseite nicht verlässt.

Was kann ich tun? Warum ist das nicht gültig?

Antwort

15

Vielleicht möchten Sie die W3 Häufig gestellte Fragen durch: http://www.w3.org/MarkUp/2004/xhtml-faq#target

Warum das Zielattribut wurde von XHTML 1.1 entfernt?

Es war nicht. XHTML 1.0 gibt es in drei Versionen: strict, transitional und frameset. Alle drei wurden bewusst so nahe wie möglich an HTML 4.01 gehalten, wie es XML erlauben würde. XHTML 1.1 ist eine aktualisierte Version von XHTML 1.0 strict, und keine Version von HTML strict hat jemals das Zielattribut enthalten. Die anderen beiden Versionen, Transitional und Frameset, wurden nicht aktualisiert, da nichts zu aktualisieren war. Wenn Sie das Zielattribut verwenden möchten, verwenden Sie XHTML 1.0 transitional.

+0

Okay, dann muss ich Strict fallen lassen .. jetzt ist es Zeit für den Übergang. – Tomkay

+4

Wie öffne ich einen Link in einem neuen Tab ohne das Zielattribut und ohne JavaScript in diesem Szenario? – user1886419

+0

Bitte versuchen Sie nicht, gute nützliche Antworten zu entfernen. Selbst wenn Sie mit SO fertig sind, profitieren sie immer noch anderen. – hvd

1

Obwohl ich nicht sagen kann, warum dieses Attribut als Workaround ungültig ist, können Sie dieses Attribut mit Javascript hinzufügen, wenn Ihre Website als XHTML Strict validiert werden soll.

5

Ich empfehle nicht hinzufügen in das Zielattribut. Es wurde aus Gründen der Barrierefreiheit fallen gelassen, und ich mag es nicht, wenn die Seite für mich entscheidet, wie meine Browser-Tags öffnen. Natürlich steht es Ihnen frei, wenn Sie möchten. Ich zeige Ihnen eine JavaScript-Methode, die Darin oben erwähnt, dass ermöglicht es Ihnen, als XHTML 1.0 Strict oder XHTML 1.1 zu überprüfen:

HTML-Code:

<!-- 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-Code:

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'; 
    } 
} 

Natürlich können Sie das window.onload weglassen, wenn Sie es bereits woanders einschließen, aber ich empfehle es zu verwenden (oder verwenden Sie eine andere Ladefunktion wie JQuery $(document).ready();), so wird das JavaScript geladen, wenn die Seite fertig geladen ist. Jetzt müssen Sie nur noch jedem Ankerlink eine Klasse von "targetblank" geben, und die Links sollten in einem neuen Tab geöffnet werden.

3

Für diese Situation verwende ich eine einfache jQuery-Lösung, die es mit XHTML Strict validiert und ermöglicht, dass neue Fenster angezeigt werden.

<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

Try this:

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

2 Ausgaben; 1- href = '#' springt am Anfang der Seite. 2- du hast SEO umgebracht. –

9

Die Frage, die Sie sich stellen sollten, ist nicht, wie man „umgehen“ die Einschränkung der Strenge, aber warum Sie XHTML Strict 1.0 in erster Linie verwendet werden soll?

In Ihrem Fall würde ich einfach Transitional als DTD verwenden.Es sei denn natürlich, dass Sie für ein bestimmtes Betriebssystem entwickeln, das zum Beispiel nicht erlaubt, dass mehrere Fenster zum Beispiel in Autosystemen, einem Mobiltelefon oder exotischeren Geräten geöffnet werden. Dies ist übrigens der Grund, warum target im HTML Strict nicht vorhanden ist.

Aber wie Sie scheinen für „normale“ Nutzung Ihrer doc Art zu entwickeln, sollte dies widerspiegeln und Sie sollten verwendet werden:

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

Siehe auch why was target removed from xhtml prost J

-1

Ich ziehe diese

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

Der beste Weg, Ziel in XHTML STRICT zu verwenden, ist: onclick="target='_blank';"

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

Beispiel: click the STRICT button at the bottom

, wenn Sie benötigen _self oder anderes Ziel können Sie die _blank zum Beispiel _self ändern: onclick="target='_self';"

Ich hoffe, diese Antwort auf einige von Ihnen hilfreich ...

+1

Durch einfaches Entfernen des Attributs zum Übergeben der statischen Validierung wird es nicht korrekt. – Brad

+0

Ja, es wird validiert, wenn das Attribut entfernt wurde, aber er möchte die URL in einem neuen Fenster oder Tab öffnen. Die beste Option, um _blank zu verwenden, ist 'onclick =" target = '_ self'; "' um die Seite zu bekommen validieren und dies tötet SEO nicht, 'href' hat einen gültigen Wert. Niemals '#' in 'href' verwenden Ich denke, es ist nicht gut für SEO ... – jagb

+0

Sie haben' XHTML 1.0 Strict' und *** pagespeed_no_defer *** in 'script pagespeed_no_defer =" "' ** nicht gültig ** für _XHTML 1.0 Strict_ – Kiquenet

Verwandte Themen