Wenn der Parameter &view-all
NICHT in der URL vorhanden ist, muss er zusammen mit einem Wert am Ende der URL hinzugefügt werden. Wenn es existiert, muss ich in der Lage sein, den Wert zu ändern, ohne eine neue URL zu erstellen, da er möglicherweise andere Parameter enthält oder nicht.
Ich habe diese Funktion gefunden, kann sie jedoch nicht zum Laufen bringen: https://stackoverflow.com/a/10997390/837705
Hier ist der Code, den ich mit der obigen Funktion habe (die ich nicht zur Arbeit bringen kann): http://jsfiddle.net/Draven/tTPYL/4/
Ich kann den Parameter und den Wert bereits anhängen:
<div onclick="javascript: window.location.assign(window.location.href+='&view-all=Yes');">Blah Blah</div>
Weitere Infos:
Wenn die URL http://www.domain.com/index.php?action=my_action
lautet, lautet der Standardwert für "& Alles anzeigen" "Ja", sodass die URL, zu der sie beim Klicken auf die Schaltfläche weitergeleitet werden, http://www.domain.com/index.php?action=my_action&view-all=Yes
lautet.
Wenn die URL http://www.domain.com/index.php?action=my_action&view-all=Yes
lautet, ändert sich die URL beim Klicken auf die Schaltfläche in http://www.domain.com/index.php?action=my_action&view-all=No
.
BEARBEITEN: Bitte geben Sie mir Beispiele. Ich kenne nicht viel von JS und mir fällt gerade keine Möglichkeit ein, dies in PHP zu tun.
function setGetParameter(paramName, paramValue)
{
var url = window.location.href;
var hash = location.hash;
url = url.replace(hash, '');
if (url.indexOf(paramName + "=") >= 0)
{
var prefix = url.substring(0, url.indexOf(paramName));
var suffix = url.substring(url.indexOf(paramName));
suffix = suffix.substring(suffix.indexOf("=") + 1);
suffix = (suffix.indexOf("&") >= 0) ? suffix.substring(suffix.indexOf("&")) : "";
url = prefix + paramName + "=" + paramValue + suffix;
}
else
{
if (url.indexOf("?") < 0)
url += "?" + paramName + "=" + paramValue;
else
url += "&" + paramName + "=" + paramValue;
}
window.location.href = url + hash;
}
Rufen Sie die Funktion oben in Ihrem Onclick-Ereignis auf.
Die gesamte präivöse Lösung berücksichtigt nicht die Möglichkeit des Teilstrings im Parameter. Zum Beispiel http: // xyz? Ca = 1 & a = 2 würde den Parameter a nicht auswählen, aber ca. Hier ist eine Funktion, die Parameter durchläuft und diese überprüft.
function setGetParameter(paramName, paramValue)
{
var url = window.location.href;
var hash = location.hash;
url = url.replace(hash, '');
if (url.indexOf("?") >= 0)
{
var params = url.substring(url.indexOf("?") + 1).split("&");
var paramFound = false;
params.forEach(function(param, index) {
var p = param.split("=");
if (p[0] == paramName) {
params[index] = paramName + "=" + paramValue;
paramFound = true;
}
});
if (!paramFound) params.Push(paramName + "=" + paramValue);
url = url.substring(0, url.indexOf("?")+1) + params.join("&");
}
else
url += "?" + paramName + "=" + paramValue;
window.location.href = url + hash;
}
Ich hatte eine ähnliche Situation, in der ich einen URL-Abfrageparameter ersetzen wollte. Ich hatte jedoch nur einen Parameter und konnte ihn einfach ersetzen:
window.location.search = '?filter=' + my_filter_value
Mit der location.search
-Eigenschaft können Sie den Abfrageteil einer URL abrufen oder festlegen.
obwohl ich die url von einer eingabe nehme, ist sie leicht an die echte url anpassbar.
var value = 0;
$('#check').click(function()
{
var originalURL = $('#test').val();
var exists = originalURL.indexOf('&view-all');
if(exists === -1)
{
$('#test').val(originalURL + '&view-all=value' + value++);
}
else
{
$('#test').val(originalURL.substr(0, exists + 15) + value++);
}
});
Um dies in PHP zu tun: Sie haben einige Parameter, um Ihre Seite anzuzeigen, sagen wir action
und view-all
. Sie werden (wahrscheinlich) bereits mit $action = $_GET['action']
oder was auch immer darauf zugreifen, möglicherweise wird ein Standardwert festgelegt.
Dann entscheiden Sie in Abhängigkeit davon, ob Sie eine Variable wie $viewAll = $viewAll == 'Yes' ? 'No' : 'Yes'
wechseln möchten.
Und am Ende bauen Sie einfach die URL mit diesen Werten wieder auf
$clickUrl = $_SERVER['PHP_SELF'] . '?action=' . $action . '&view-all=' . $viewAll;
Und das ist es.
Sie hängen also vom Seitenstatus ab und nicht von der Benutzer-URL (weil Sie später entscheiden, dass $ viewAll als Standard oder was auch immer ja ist).
ich würde eine kleine Änderung an @ Lajos 'Antwort vorschlagen ... In meiner speziellen Situation könnte ich möglicherweise einen Hash als Teil der URL enthalten, der Probleme beim Parsen des Parameters verursacht, den wir mit dieser Methode nach der Umleitung einfügen.
function setGetParameter(paramName, paramValue) {
var url = window.location.href.replace(window.location.hash, '');
if (url.indexOf(paramName + "=") >= 0) {
var prefix = url.substring(0, url.indexOf(paramName));
var suffix = url.substring(url.indexOf(paramName));
suffix = suffix.substring(suffix.indexOf("=") + 1);
suffix = (suffix.indexOf("&") >= 0) ? suffix.substring(suffix.indexOf("&")) : "";
url = prefix + paramName + "=" + paramValue + suffix;
}else {
if (url.indexOf("?") < 0)
url += "?" + paramName + "=" + paramValue;
else
url += "&" + paramName + "=" + paramValue;
}
url += window.location.hash;
window.location.href = url;
}
Einige einfache Ideen, um Sie zum Laufen zu bringen:
In PHP können Sie dies folgendermaßen tun:
if (!array_key_exists(explode('=', explode('&', $_GET))) {
/* add the view-all bit here */
}
In Javascript:
if(!location.search.match(/view\-all=/)) {
location.href = location.href + '&view-all=Yes';
}
Ich denke, so etwas würde funktionieren, den @Marc-Code aktualisieren:
//view-all parameter does NOT exist
$params = $_GET;
if(!isset($_GET['view-all'])){
//Adding view-all parameter
$params['view-all'] = 'Yes';
}
else{
//view-all parameter does exist!
$params['view-all'] = ($params['view-all'] == 'Yes' ? 'No' : 'Yes');
}
$new_url = $_SERVER['PHP_SELF'].'?'.http_build_query($params);
Hier ist eine Möglichkeit, dies zu erreichen. Es nimmt den Parameternamen und den Parameterwert sowie ein optionales 'clear' an. Wenn Sie clear = true angeben, werden alle anderen Parameter entfernt und der neu hinzugefügte Parameter wird einfach verlassen. In anderen Fällen wird das Original durch das neue ersetzt, oder es wird hinzugefügt, wenn es nicht in der Querzeichenfolge enthalten ist.
Dies wird von der ursprünglichen Top-Antwort modifiziert, da derjenige gebrochen ist, wenn er etwas anderes als den letzten Wert ersetzt hat. Dies funktioniert für jeden Wert und behält die bestehende Reihenfolge bei.
function setGetParameter(paramName, paramValue, clear)
{
clear = typeof clear !== 'undefined' ? clear : false;
var url = window.location.href;
var queryString = location.search.substring(1);
var newQueryString = "";
if (clear)
{
newQueryString = paramName + "=" + paramValue;
}
else if (url.indexOf(paramName + "=") >= 0)
{
var decode = function (s) { return decodeURIComponent(s.replace(/\+/g, " ")); };
var keyValues = queryString.split('&');
for(var i in keyValues) {
var key = keyValues[i].split('=');
if (key.length > 1) {
if(newQueryString.length > 0) {newQueryString += "&";}
if(decode(key[0]) == paramName)
{
newQueryString += key[0] + "=" + encodeURIComponent(paramValue);;
}
else
{
newQueryString += key[0] + "=" + key[1];
}
}
}
}
else
{
if (url.indexOf("?") < 0)
newQueryString = "?" + paramName + "=" + paramValue;
else
newQueryString = queryString + "&" + paramName + "=" + paramValue;
}
window.location.href = window.location.href.split('?')[0] + "?" + newQueryString;
}
Warum die Abfragezeichenfolge selbst analysieren, wenn der Browser dies für Sie erledigen kann?
function changeQS(key, value) {
let urlParams = new URLSearchParams(location.search.substr(1));
urlParams.set(key, value);
location.search = urlParams.toString();
}
Ich brauche Hilfe, um mein Skript unten anzupassen oder ein Skript zu finden, das auf meiner Wordpress-Site verwendet werden könnte, um die URL-Suffix-Parameter von einer Forward-URL zu übernehmen und dann über die Schaltfläche Klick-URL zum Verfolgen der richtigen Forward-Anzeigen-ID hinzuzufügen.
GRUND: Parameter werden für die Anzeigenverfolgung verwendet, um herauszufinden, von welcher Anzeige der Benutzer weitergeleitet wurde, auch wenn der Benutzer mit einem Klick von der Optin-Seite zur Verkaufsseite springt.
Hier das Ziel zu erreichen: 1. Eine FB-Anzeige zeigt auf eine Optin-Seite mit Tracking-Code: https://ownsite.com/optin-page/?tid=fbad1 2. Auf der Optin-Seite gibt es eine Schaltfläche mit einer Setup-URL, die zur Verkaufsseite weitergeleitet werden kann. Wenn Sie jedoch auf diese Schaltfläche klicken, wird nur die URL weitergeleitet. Der Parameter "? Tid = fbad1" fehlt jedoch . 3. Das Auto-Forward-Skript (das ordnungsgemäß funktioniert) kann zum Ändern des Vorwärtsklickens der Schaltfläche verwendet werden, hat jedoch eine Einschränkung, da es nur "TID" -Parameter statt UTM-Parameter verwendet.
Daher muss ein Skriptcode implementiert werden, um Klick-Schaltflächen festzulegen (auch um sie zu formatieren oder stattdessen Bilder zu verwenden). Wenn Sie auf die Schaltfläche klicken, um auf eine andere Verkaufsseite zu gelangen, wird der Suffix-Parameter von der aktuellen Optin-Seite übernommen, um sie dann an den Verkauf weiterzuleiten. page https://ownsite.com/sales-page/?tid=fbad1 enthält auch UTM-Parameter
Derzeit hätte ich dies mit einem Auto-Redirect-Skript lösen können, aber A.) Ich möchte auf dieser Seite keinen Autoredirect verwenden. Besser ist eine Ereignis-Klick-Schaltfläche, mit der der Benutzer selbst klicken kann, um mit dem URL-Parameter weiterzuleiten B.) Der Parameter für die Tracking-ID in diesem Skript ist auf "? Tid = ..." beschränkt. Stattdessen möchte ich auch Um den UTM-Code zu verfolgen, klicken Sie auch auf .__ Schnappen Sie sich von der aktuellen Seite den Parameter für URL https://www.optin-page.com/?tid=facebookad1?utm_campaign=blogpost . Klicken Sie dann auf die Schaltfläche zum Erfassen von Parametern und fügen Sie dem Schaltflächenset URL https: // hinzu. www.sales-page.com/?tid=facebookad1?utm_campaign=blogpost
Hier finden Sie jetzt den Code, der zur automatischen Umleitung und zum Abrufen der URL-Parameter verwendet wird. Dieser Code soll jetzt geändert werden, um eine Schaltfläche mit einem Klickereignis erstellen zu können, die dann an die Weiterleitungs-URL mit Parametererfassung der aktuellen URL weitergeleitet wird, wenn auf die Schaltfläche geklickt wird (wie oben angegeben).
<p><!-- Modify this according to your requirement - core script from https://Gist.github.com/Joel-James/62d98e8cb3a1b6b05102 and suffix grabbing </p>
<h3 style="text-align: center;"><span style="color: #ffffff; background-color: #039e00;">►Auto-redirecting after <span id="countdown">35</span> seconds◄</span></h3>
<p><!-- JavaScript part --><br /><script type="text/javascript">
function findGetParameter(parameterName) {
var result = null,
tmp = [];
location.search
.substr(1)
.split("&")
.forEach(function (item) {
tmp = item.split("=");
if (tmp[0] === parameterName) result = decodeURIComponent(tmp[1]);
});
return result;
}
// Total seconds to wait
var seconds = 45;
function countdown() {
seconds = seconds - 1;
if (seconds < 0) {
// Chnage your redirection link here
var tid = findGetParameter('tid');
window.location = "https://www.2share.info/ql-cb2/" + '?tid='+tid;
} else {
// Update remaining seconds
document.getElementById("countdown").innerHTML = seconds;
// Count down using javascript
window.setTimeout("countdown()", 1000);
}
}
// Run countdown function
countdown();
</script></p>
Dies ist mein Beispielcode für die Neuerstellung der URL-Abfragezeichenfolge mit JS
//function get current parameters
$.urlParam = function(name){
var results = new RegExp('[\?&]' + name + '=([^&#]*)').exec(window.location.href);
if (results==null){
return null;
}
else{
return results[1] || 0;
}
};
//build a new parameters
var param1 = $.urlParam('param1');
var param2 = $.urlParam('param2');
//check and create an array to save parameters
var params = {};
if (param1 != null) {
params['param1'] = param1;
}
if (order != null) {
params['param2'] = param2;
}
//build a new url with new parameters using jQuery param
window.location.href = window.location.Origin + window.location.pathname + '?' + $.param(params);
Ich habe JQUERY param: http://api.jquery.com/jquery.param/ verwendet, um eine neue URL mit neuen Parametern zu erstellen.
var updateQueryStringParameter = function (key, value) {
var baseUrl = [location.protocol, '//', location.Host, location.pathname].join(''),
urlQueryString = document.location.search,
newParam = key + '=' + value,
params = '?' + newParam;
// If the "search" string exists, then build params from it
if (urlQueryString) {
var updateRegex = new RegExp('([\?&])' + key + '[^&]*');
var removeRegex = new RegExp('([\?&])' + key + '=[^&;]+[&;]?');
if( typeof value == 'undefined' || value == null || value == '' ) {
params = urlQueryString.replace(removeRegex, "$1");
params = params.replace( /[&;]$/, "" );
} else if (urlQueryString.match(updateRegex) !== null) {
params = urlQueryString.replace(updateRegex, "$1" + newParam);
} else {
params = urlQueryString + '&' + newParam;
}
}
// no parameter was set so we don't need the question mark
params = params == '?' ? '' : params;
window.history.replaceState({}, "", baseUrl + params);
};