21 Stimmen

Hinzufügen von Parametern zu Links auf der Seite mit Jquery

Wie füge ich, sagen wir, etwas hinzu wie ajax=1 zu allen Links auf meiner Seite mit Jquery. Ich muss auch prüfen, ob die URL vorhandene Parameter hat. zum Beispiel http://example.com/index.php?pl=132 werden müssen http://example.com/index.php?pl=132&ajax=1

Auch wenn der Link keine Parameter hat, zum Beispiel http://example.com/index.php wird es zu http://example.com/index.php?ajax=1 Ich möchte das jQuery-Skript auf Dokument bereit zu laden, so dass alle Links auf Seite laden geändert werden.

58voto

Nick Craver Punkte 609016

Sie könnten etwa so vorgehen:

$(function() {
   $("a").attr('href', function(i, h) {
     return h + (h.indexOf('?') != -1 ? "&ajax=1" : "?ajax=1");
   });
});

Auf document.ready Dies betrachtet jeden <a> schaut auf seine href, wenn sie enthält ? Schon wird angehängt &ajax=1 wenn nicht, wird angehängt ?ajax=1 .

0 Stimmen

Außer bei /weird/page.aspx? . Außerdem funktioniert dies nicht bei benannten Ankern.

0 Stimmen

@SLaks - Das Problem ist das anfängliche Rendering des Links in diesem Fall, nicht jQuery...

0 Stimmen

Soweit ich weiß, ist das eine legale (aber sehr unwahrscheinliche) URL.

6voto

SLaks Punkte 832502

Zum Beispiel so:

$(function() {
    $('a[href]').attr('href', function(index, href) {
        var param = "key=value";

        if (href.charAt(href.length - 1) === '?') //Very unlikely
            return href + param;
        else if (href.indexOf('?') > 0)
            return href + '&' + param;
        else
            return href + '?' + param;
    });
})

1 Stimmen

Ich habe das Skript getestet. Benannte Anker schlagen fehl. Links wie "mysite.com/wiki/something" werden nicht angehängt....

0 Stimmen

Aus irgendeinem Grund wird mein Schlüssel-Wert-Paar zweimal angehängt? Zum Beispiel: ?schlüssel=wert&schlüssel=wert

6voto

seanhodges Punkte 17033

Hier ist eine Lösung, die ich für natives Javascript zusammengestellt habe, sie unterstützt vorhandene Abfragezeichenfolgen und Anker:

function addToQueryString(url, key, value) {
    var query = url.indexOf('?');
    var anchor = url.indexOf('#');
    if (query == url.length - 1) {
        // Strip any ? on the end of the URL
        url = url.substring(0, query);
        query = -1;
    }
    return (anchor > 0 ? url.substring(0, anchor) : url)
         + (query > 0 ? "&" + key + "=" + value : "?" + key + "=" + value)
         + (anchor > 0 ? url.substring(anchor) : "");
}

Ich habe meine bestehenden Tests auf JSBin veröffentlicht: http://jsbin.com/otapem/2/

0 Stimmen

Gute Lösung, Anker unterstützen

2voto

Sampson Punkte 258265

Wenn Sie an Plugins interessiert sind, gibt es die jQuery Abfrage String Objekt . Dies ermöglicht Ihnen eine einfache Überprüfung der Parameter im Querystring und bei Bedarf die Möglichkeit, weitere hinzuzufügen, einige zu entfernen oder andere zu bearbeiten.

3 Stimmen

Das ist nicht das, wonach er sucht.

0 Stimmen

@SLaks Ich bin anderer Meinung. Dies erreicht, was Sie angeboten haben, aber in einem Plugin verpackt und weniger ausführlich. Sie können prüfen, ob ein Parameter vorhanden ist, wenn nicht, fügen Sie ihn hinzu, usw.

0 Stimmen

Können dadurch bestehende Hyperlinks geändert werden?

2voto

Unter Berücksichtigung der obigen Ausführungen ist dies der beste Weg, um Parameter mit Links zu verknüpfen.

Vermeiden Sie auch Links mit href wie href="Javascript:IhreFunktion();".

$(function(){                                      
   var myRandom = getRandom();       
   $('a[href]').each(function(i){
        var currHref = $(this).attr("href");
        var isAfunction = currHref.substring(0,10);              
        if(isAfunction == "javascript"){                
            $(this).attr("href",currHref);
        }else{
            if (currHref.charAt(currHref.length - 1) === '?')                           
                $(this).attr("href",currHref);
            else if (currHref.indexOf('?') > 0)                
                $(this).attr("href",currHref+"&rand="+getRandom());
            else                  
                $(this).attr("href",currHref+"?rand="+getRandom());
        }
   });               
});
function getRandom(){
    var randomnumber = Math.floor(Math.random()*10000); 
    return randomnumber;
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X