2012-01-14 19 views
30

En mi sitio web:¿Cómo cambiar la URL actual en javascript?

http://mywebsite.com/1.html 

Quiero usar el

window.location.pathname 

para conseguir la última parte de la url:

1.html 

y ya que tengo todas mis páginas web en los números Quiero agregar 1 a la URL actual para que cuando haga clic en un botón me redirija a la siguiente página:

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

¿Alguna idea de por qué esto no funciona?

+0

Solo está agregando 1 a la url. Necesita incrementar la porción numérica del nombre de archivo - # .html – Mark

Respuesta

30

Su ejemplo no funcionaba porque está intentando agregar 1 a una cadena que se ve así: "1.html". Eso solo te dará este "1.html1" que no es lo que quieres. Debe aislar la parte numérica de la cadena y luego convertirla a un número real antes de poder realizar operaciones matemáticas. Después de obtener un número real, puede aumentar su valor y luego combinarlo con el resto de la cadena.

Se puede utilizar una costumbre reemplazar la función como esta para aislar las diferentes piezas de la URL original y sustituir el número con un número incrementado:

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

entonces se le puede llamar así:

window.location.href = nextImage(); 

demo aquí: http://jsfiddle.net/jfriend00/3VPEq/

Esto funcionará para cualquier URL que termine en algunas series de dígitos seguidos de .html y si es necesario como ligeramente diferente forma de URL, podría simplemente modificar la expresión regular.

+1

Gracias su trabajo como encanto –

+2

No creo que haya suficientes palabras para agradecer :) –

0

Incluso no es una buena manera de hacer lo que quiera probar esta pista: var url = debe ser un NUMER PRIMERA

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

Supongo que esperaban que usted mostrara cómo obtener el número. –

+0

sí, eso es cierto, pero mira la pregunta y el problema en general ... – albanx

0

Lo que estás haciendo está añadiendo un "1" (la cadena) a su URL. Si desea el enlace de la página 1.html a la página 2.html, necesita sacar el 1 de la cadena, agregar uno y luego volver a ensamblar la cadena.

Por qué no hacer algo como esto:

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

nextPage contendrá la URL http://mywebsite.com/2.html en este caso. Debería ser fácil poner una función si es necesario.

1

Esto es más 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(''); 

Cuando la URL tiene varios números, que va a cambiar la última:

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

Es compatible con los números con ceros a la izquierda:

http://mywebsite.com/0001.html 

Example