2012-01-14 14 views
30

Sul mio sito:Come modificare l'URL corrente in javascript?

http://mywebsite.com/1.html 

voglio usare il

window.location.pathname 

per ottenere l'ultima parte dell'URL:

1.html 

e siccome ho tutte le mie pagine web in numeri Voglio aggiungere 1 all'URL corrente in modo che quando faccio clic su un pulsante, esso venga reindirizzato alla pagina successiva:

var url = 'http://mywebsite.com/' + window.location.pathname; 
function nextImage(){ 
url = url + 1; 
} 

qualche idea sul perché questo non funziona?

+0

Stai solo aggiungendo 1 all'URL. È necessario incrementare la parte numerica del nome file - # .html – Mark

risposta

30

L'esempio non funzionava perché si sta tentando di aggiungere 1 a una stringa simile a questa: "1.html". Questo ti farà ottenere questo "1.html1" che non è quello che vuoi. Devi isolare la parte numerica della stringa e poi convertirla in un numero reale prima di poter fare matematica su di essa. Dopo averlo portato a un numero reale, puoi quindi aumentarne il valore e quindi combinarlo con il resto della stringa.

È possibile utilizzare una funzione personalizzata sostituire come questo per isolare i vari pezzi del URL originale e sostituire il numero con un numero incrementato:

function nextImage() { 
    return(window.location.href.replace(/(\d+)(\.html)$/, function(str, p1, p2) { 
     return((Number(p1) + 1) + p2); 
    })); 
} 

È quindi possibile chiamare in questo modo:

window.location.href = nextImage(); 

Demo qui: http://jsfiddle.net/jfriend00/3VPEq/

Questo funziona per qualsiasi URL che termina con alcune serie di cifre seguite da .html e se necessario come forma di URL leggermente diversa, potresti semplicemente modificare l'espressione regolare.

+1

Grazie al suo lavoro come fascino –

+2

Non credo che ci siano abbastanza parole per ringraziarti :) –

0

anche se non è un buon modo di fare ciò che si vuole provare questo suggerimento: var url = deve essere un NUMER PRIMO

function nextImage(){ 
url = url + 1; 
location.href='http://mywebsite.com/' + url+'.html'; 
} 
+0

Immagino che si aspettassero di mostrare come ottenere il numero. –

+0

sì è vero, ma guarda la domanda e il problema in generale ... – albanx

0

Quello che stai facendo è l'aggiunta di un "1" (la stringa) al tuo URL. Se vuoi il collegamento 1.html della pagina alla pagina 2.html devi prendere il 1 della stringa, aggiungerne uno, quindi riassemblare la stringa.

perché non fare qualcosa di simile:

var url = 'http://mywebsite.com/1.html'; 
var pageNum = parseInt(url.split("/").pop(),10); 
var nextPage = 'http://mywebsite.com/'+(pageNum+1)+'.html'; 

nextPage conterrà l'url http://mywebsite.com/2.html in questo caso. Dovrebbe essere facile inserire una funzione se necessario.

1

Questo è più robusto:

mi = location.href.split(/(\d+)/); 
no = mi.length - 2; 
os = mi[no]; 
mi[no]++; 
if ((mi[no] + '').length < os.length) mi[no] = os.match(/0+/) + mi[no]; 
location.href = mi.join(''); 

Quando l'URL ha più numeri, cambierà l'ultima:

http://mywebsite.com/8815/1.html 

Esso supporta i numeri con zeri iniziali:

http://mywebsite.com/0001.html 

Example

Problemi correlati