Ich erstelle ein benutzerdefiniertes, branchenspezifisches CMS (mit Django). Im Backend können Webmaster entweder eine interne Verbindung angeben, z. "/ page1" oder ein externer Link, der für verschiedene Navigationselemente auf der gesamten Website verwendet werden kann (alle verwenden <a>
, wenn sie gerendert werden). Das Problem ist, dass ich möchte, dass interne Links auf der aktuellen Registerkarte geöffnet werden, aber externe Links sollten target="_blank"
verwenden, um eine neue Registerkarte oder ein neues Fenster zu öffnen.
Wie kann ich den HTML-Code verarbeiten, um dies zu erreichen?
Ich würde eine serverseitige Lösung bevorzugen, aber mir ist keine saubere Möglichkeit bekannt, gerenderte Vorlagen in django vorzuverarbeiten. Also, ich nehme an, der einfachste Weg, dies zu tun, ist wahrscheinlich eine javascript / jquery-Lösung: ein Skript, das beim Laden jeder Seite ausgeführt wird und das Attribut "target=" _ blank "zu allen externen Links, aber nicht zu internen Links hinzufügt. Aber ich weiß auch nicht, wie ich das machen soll.
Ich benutze das Folgende für eine Weile. Kann mich nicht erinnern, wo ich es ursprünglich gefunden habe:
%Vor% Das fügt einen :external
jQuery-Selektor hinzu, also können Sie einfach Folgendes tun:
Das Schöne an der Verwendung des benutzerdefinierten Selektors ist, dass Sie, wenn Sie einen "externen" Link ändern müssen, diesen an einer Stelle ändern können und sich nicht um den Rest Ihres Codes kümmern müssen. Zum Beispiel haben wir in meiner Organisation bestimmte Subdomains, die nicht "extern" sind, sondern die wir immer noch in neuen Fenstern öffnen wollen.
Sie könnten so etwas tun:
%Vor% Dies wird jeden Link verarbeiten, wenn Sie darauf klicken, und sollte nicht jeden Link mehr als einmal verarbeiten. Wenn es extern sein muss, wird target
auf _blank
gesetzt und es sollte in einem neuen Fenster geöffnet werden. Hier ist eine Arbeit .
Aktualisieren : Meine Methode zu bestimmen, ob die Verknüpfung vor Ort bleibt oder nicht, ist ziemlich grob. Die Methode in diese Antwort ist gründlicher. Ich würde wahrscheinlich meine einfache Regex-Übereinstimmung stattdessen durch diesen Test ersetzen.
Ich empfehle Ihnen, diese Serverseite zu machen. Ändern Sie die Vorlage der Seite je nach dem Ort des Links.
Sie könnten das auch tun:
$("a[href^='http://']").attr("target","_blank");
oder
%Vor%Tags und Links django javascript jquery