Foros del Web » Programando para Internet » Javascript »

Restar en un enlace

Estas en el tema de Restar en un enlace en el foro de Javascript en Foros del Web. Hola, el problema que tengo es que necesito hacer una resta en un enlace. El javascript que lo hace es muy fácil, pero dentro de ...
  #1 (permalink)  
Antiguo 26/06/2010, 11:01
 
Fecha de Ingreso: octubre-2008
Mensajes: 16
Antigüedad: 15 años, 6 meses
Puntos: 0
Pregunta Restar en un enlace

Hola, el problema que tengo es que necesito hacer una resta en un enlace. El javascript que lo hace es muy fácil, pero dentro de un enlace no funciona.

Acá les dejo un ejemplo:
<a href="google.com/1584">EJEMPLO</a>

Y quiero que me quede así:
<a href="google.com/1583">EJEMPLO</a>


Esperando sus respuesta,
Un cordial saludo, PAblo1111.
  #2 (permalink)  
Antiguo 26/06/2010, 11:20
Avatar de _cronos2
Colaborador
 
Fecha de Ingreso: junio-2010
Mensajes: 2.062
Antigüedad: 13 años, 10 meses
Puntos: 310
Respuesta: Restar en un enlace

Suponiendo que no haya más '/' y que el número que buscas sea el final del href
Código Javascript:
Ver original
  1. function cambiar(a){
  2.  var barra = a.href.indexOf('/');
  3.  var numero = a.href.substring(barra+1, a.href.length);
  4.  a.href = 'google.com/' + parseInt(numero) - 1;
  5. }
Código HTML:
Ver original
  1. <a href='google.com/1234' onclick='cambiar(this);'>EJEMPLO</a>

Saludos (:
  #3 (permalink)  
Antiguo 26/06/2010, 14:42
Avatar de Adler
Colaborador
 
Fecha de Ingreso: diciembre-2006
Mensajes: 4.671
Antigüedad: 17 años, 3 meses
Puntos: 126
Respuesta: Restar en un enlace

Hola

Con expresiones regulares es mas sencillo

Código Javascript:
Ver original
  1. var encaja = /\d+$/.exec(a);
  2. var valor = parseInt(encaja-1);
  3. var retorna = a.replace(/\d+$/, valor);
  4. alert(retorna);

Suerte
__________________
Los formularios se envían/validan con un botón Submit
<input type="submit" value="Enviar" style="background-color:#0B5795; font:bold 10px verdana; color:#FFF;" />
  #4 (permalink)  
Antiguo 26/06/2010, 14:56
Avatar de _cronos2
Colaborador
 
Fecha de Ingreso: junio-2010
Mensajes: 2.062
Antigüedad: 13 años, 10 meses
Puntos: 310
Respuesta: Restar en un enlace

Cierto, pero esque yo de expresiones regulares no tengo ni idea
Entiendo \d, ¿pero qué significa +$?
Saludos (:
  #5 (permalink)  
Antiguo 26/06/2010, 15:06
Avatar de Adler
Colaborador
 
Fecha de Ingreso: diciembre-2006
Mensajes: 4.671
Antigüedad: 17 años, 3 meses
Puntos: 126
Respuesta: Restar en un enlace

Cita:
Iniciado por _cronos2 Ver Mensaje
¿pero qué significa +$?
El final de la cadena y ^ el principio de la cadena
__________________
Los formularios se envían/validan con un botón Submit
<input type="submit" value="Enviar" style="background-color:#0B5795; font:bold 10px verdana; color:#FFF;" />
  #6 (permalink)  
Antiguo 26/06/2010, 18:42
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años
Puntos: 1485
Respuesta: Restar en un enlace

¡que peticion mas rara! de todos modos, la version de Adler la haria con funciones.
Código:
a.replace(/\d+$/, function(digits){return digits - 1;});

// un ejemplo mas completo;
<a href="http://www.google.com/3987" onclick="this.href = this.href.replace(/\d+$/, function(digits){return digits - 1;});">link</a>
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #7 (permalink)  
Antiguo 27/06/2010, 07:08
Avatar de Adler
Colaborador
 
Fecha de Ingreso: diciembre-2006
Mensajes: 4.671
Antigüedad: 17 años, 3 meses
Puntos: 126
Respuesta: Restar en un enlace

Al principio también pensé en usar una función, algo como esto
Cita:
this.href.replace(/(\d)+$/, function(){return parseInt($1-1);})
para sacar el primer grupo, pero como no estaba seguro, lo probé y no hubo manera. Ahora tú haces
Cita:
this.href.replace(/\d+$/, function(digits){return digits - 1;})
pasandole un argumento, que no lo entiendo, y funciona. ¿Como que el valor de ese argumento es 3987?

Siempre me ganas por la mano, como te odio!!
__________________
Los formularios se envían/validan con un botón Submit
<input type="submit" value="Enviar" style="background-color:#0B5795; font:bold 10px verdana; color:#FFF;" />
  #8 (permalink)  
Antiguo 27/06/2010, 11:30
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años
Puntos: 1485
Respuesta: Restar en un enlace

Cita:
Siempre me ganas por la mano, como te odio!!
¡jeje! se que lo dices en broma, pero no te preocupes, en verdad no tiene secreto. como ya tu sabras, el segundo argumento de replace acepta dos tipos de valores: un string con el cual será reemplazado, o una funcion que devuelve un string. esta funcion recibe automaticamente una cantidad variable de argumentos dependiendo de la expresion. basicamente los argumentos tienen este esquema.
Código:
// Sipnosis:
function(match, group1, group2, ..., groupN, index, input){}
Argumentos:
  • match
    contiene la cadena de todo lo pareado por la expresion, incluyendo subexpresiones.
  • group1, group2, ..., groupN
    estos argumentos se van creando de acuerdo a la cantidad de grupos en la expresion. cada uno de estos argumentos contiene la cadena de acuerdo a lo pareado por cada grupo. el orden de los argumentos corresponde segun el orden de grupos en la expresion.
  • index
    contiene un valor numerico que indica la posicion donde la expresion comenzo a parear dentro de la cadena. o sea, es parecido a indexOf.
  • input
    el string completo en el estado original. es decir, antes de que el reemplazo tome lugar.

me parece a mi que tu confusion fue utilizar unas "variables especiales" dentro de una funcion. estas "variables especiales" solo son validas si el segundo argumento de replace es un string.
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #9 (permalink)  
Antiguo 27/06/2010, 13:11
Avatar de Adler
Colaborador
 
Fecha de Ingreso: diciembre-2006
Mensajes: 4.671
Antigüedad: 17 años, 3 meses
Puntos: 126
Respuesta: Restar en un enlace

Cita:
Iniciado por zerokilled Ver Mensaje
esta funcion recibe automaticamente una cantidad variable de argumentos dependiendo de la expresion.
No sabía esto
Cita:
Iniciado por zerokilled Ver Mensaje
me parece a mi que tu confusion fue utilizar unas "variables especiales" dentro de una funcion. estas "variables especiales" solo son validas si el segundo argumento de replace es un string.
Es a lo que estoy acostumbrado en ASP e intenté usar su lógica
Cita:
Iniciado por zerokilled Ver Mensaje
¡jeje! se que lo dices en broma
Por supuesto, es un placer ver como resuelves y las explicaciones tan detalladas y comprensibles que das
__________________
Los formularios se envían/validan con un botón Submit
<input type="submit" value="Enviar" style="background-color:#0B5795; font:bold 10px verdana; color:#FFF;" />

Etiquetas: enlace, restar
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 14:32.