Linktarget-Änderung per jQuery

Status
Dieses Thema wurde gelöst! Zur Lösung gehen…

preko

Erfahrenes Mitglied
Hallo,

ich möchte mehrere Links innerhalb einer (SharePoint-) Webseite ändern/manipulieren. Die ursprünglichen Links weisen auf ein Änderungsformular hin, welches mittels einer ID den entsprechenden Datensatz zur Änderung anbietet. Da nun verschiedene Seiten mit verschiedenen Berechtigungen Änderungen an einer Datenbanktabelle (Liste) vornehmen sollen, möchte ich eine Möglichkeit schaffen, auf individuelle Änderungsformularseiten zu verweisen, damit auch nur die Felder angeboten werden, die den jeweiligen Berechtigungen entsprechen.

Ich habe nun folgenden, beispielhaften Aufbau der HTML-Seite, auf der die Links dargestellt werden:
HTML:
<div class="container-fluid">
    <div class="row">
        <div class="col-md-12"><br /><br /><br /><br /></div>
    </div>
    <div class="row">
        <div class="col-md-4">&nbsp;</div>
        <div class="col-md-4 text-center bg-success">
            <a href="https://domain.de/projekte/Beispiel/_layouts/15/listform.aspx?PageType=6&ListId=%7BB054E6C4%2DE31E%2D4289%2D8841%2D944127C1234F%7D&ID=1">Link 1, der auf Standardformular verweist.</a>
        </div>
        <div class="col-md-4">&nbsp;</div>
    </div>
    <div class="row">
        <div class="col-md-4">&nbsp;</div>
        <div class="col-md-4 text-center bg-success">
            <a href="https://domain.de/projekte/Beispiel/_layouts/15/listform.aspx?PageType=6&ListId=%7BB054E6C4%2DE31E%2D4289%2D8841%2D944127C1234F%7D&ID=2">Link 2, der auf Standardformular verweist.</a>
        </div>
        <div class="col-md-4">&nbsp;</div>
    </div>
</div>

Nun habe ich danach jQuery Code eingefügt, der die Seite nach Entsprechungen zum Link absucht und dann den ursprünglichen Link modifiziert, so dass ein anderes Formular angesprochen wird. Grundsätzlich funktioniert das Ganze bei einfachen Links, wie z. B. von http://www.google.de auf http://www.microsoft.com zu ändern, etc., allerdings habe ich ein Problem bei der Maskierung (welche Zeichen sind zu maskieren und in welcher Form) der Sonderzeichen im Regex-Bereich des jQuery-Codeblocks, wenn die Links andere Sonderzeichen wie z. B. "?", "_", "&", "%", etc. enthalten.

Ja, ich habe Google gelöchert, aber ich kapiere es einfach nicht. Ich finde Regex, so sinnig und mächtig es auch ist, :poop: und kriege es einfach nicht hin. Kann mir bitte jemand sagen, wo der "Wurm" drin ist, so dass ich mal zu Potte komme mit dem Codeteil?

Javascript:
<script type="text/javascript">
$(document).ready(function(){
    $("a[href^='https://domain.de/projekte/Beispiel/_layouts/15/listform.aspx?PageType=6&ListId=%7BB054E6C4%2DE31E%2D4289%2D8841%2D944127C1234F%7D&ID=']")
       .each(function()
       {
          this.href = this.href.replace(/^https:\/\/domain\.de\/projekte\/Beispiel\/_layouts\/15\/listform\.aspx?PageType=6&ListId=%7BB054E6C4%2DE31E%2D4289%2D8841%2D944127C1234F%7D&ID=/,
             "https://domain.de/projekte/Beispiel/Lists/Muster/MeinFormular.aspx?ID=");
       });                 
});
</script>

Vielen Dank!
 
Ich habe es nicht vollständig analysiert und getestet, aber auf den ersten Blick fällt schon auf, dass das Fragezeichen eine spezielle Bedeutung in Regex hat, Du musst auch diesem einen Backslash voran stellen.
Kennst Du dieses schon, gut zum Testen:
https://regex101.com
 
@Sempervivum:
vielen Dank! U made my day!!! (y)

Kannte das Tool nicht, habe es mir direkt in die Favoriten gespeichert. Hat mir geholfen, den Vergleichsstring zu korrigieren.

Es musste so lauten:
Javascript:
<script type="text/javascript">
$(document).ready(function(){
    $("a[href^='https://domain.de/projekte/Beispiel/_layouts/15/listform.aspx?PageType=6&ListId=%7BB054E6C4%2DE31E%2D4289%2D8841%2D944127C1234F%7D&ID=']")
       .each(function()
       {

          this.href = this.href.replace(/https:\/\/domain\.de\/projekte\/Beispiel\/_layouts\/15\/listform\.aspx\?PageType=6&ListId=%7BB054E6C4%2DE31E%2D4289%2D8841%2D944127C1234F%7D&ID=/,
             "https://domain.de/projekte/Beispiel/Lists/Muster/MeinFormular.aspx?ID=");

       });                
});
</script>

Wie Du bereits vermutet hast, musste der Backslash vor dem Fragenzeichen stehen, allerdings auch das "Dach"-Symbol vor dem "https://" musste weg!

Beste Grüße!
 
Status
Dieses Thema wurde gelöst! Zur Lösung gehen…
Zurück