2011-02-08 4 views
6

Estoy tratando de reemplazar los valores de las url en toda la página usando Javascript vainilla. No puedo usar CUALQUIER biblioteca/framework. Esto es lo que tengo hasta ahora que se ha colocado en la parte superior de cada página entre las etiquetas:Cambiar TODOS los enlaces, hrefs, urls con vainilla Javascript y regex

<script type="text/javascript"> 
function change_url() { 
    var str = ''; 
    str = str.replace(/blog\.domain\.info/g, 'blogtest\.domain\.info'); 
} 
change_url(); 
</script> 

Sin embargo, esto no está funcionando cuando se carga la página.

Básicamente, necesito enlaces de recursos para ir de http://blog.domain.info a http://blogtest.domain.info. Tarea simple, lo sé! Pero el código anterior no funciona hasta ahora.

Sugerencias sobre qué cambiar?

+3

"vainilla Javascript": estás haciendo tu vida más difícil de lo necesario. jQuery etc. ¡ftw! – ThiefMaster

+0

No se puede usar ningún tipo de estructura/biblioteca ... TIENE que ser de vainilla. – JsusSalv

Respuesta

13

Después de leer su comentario, tiene algo así como

function replace_url(elem, attr) { 
    var elems = document.getElementsByTagName(elem); 
    for (var i = 0; i < elems.length; i++) 
     elems[i][attr] = elems[i][attr].replace('blog.domain.info', 'blogtest.domain.info'); 
} 

window.onload = function() { 
    replace_url('a', 'href'); 
    replace_url('img', 'src'); 
    // etc 
} 
+0

Esta fue una muy buena respuesta. ¡Muchas gracias! – JsusSalv

+0

No hay problema. :)

2

Si usted está apuntando enlaces, usted puede hacer esto:

<script type="text/javascript"> 
    var els = document.getElementsByTagName('a'), 
     len = els.length; 

    while(len--) { 
     els[len].hostname = els[len].hostname.replace('blog.domain.info','blogtest.domain.info'); 
    } 
</script> 

Coloque este script justo dentro de la </body> etiqueta de cierre.

Para etiquetas adicionales, especifique el nombre de la etiqueta y la propiedad que está actualizando.

+0

¡Esto también es increíble! No lo vi a tiempo, pero lo probaré también. Gracias por su ayuda e información. – JsusSalv

0

Bueno, es muy difícil, ¿cómo se pueden modificar los elementos del encabezado antes de que se encuentren? Si puede forzar a su JS a funcionar antes de la carga, quizás, pero lo dudo. Podrías ir después de la carga, encontrar las entradas, reescribirlas y cargarlas de manera asincrónica, pero el código puede pasar por alto los eventos de inicialización de esa manera. Se complicará.

Los elementos pueden abordarse utilizando el enfoque getElementsByTagName() que otras respuestas mencionan. Esto está bien para los cambios src/href, pero no se ocupará de las imágenes CSS, background-image en particular, que pueden ocurrir en muchos elementos. Luego está la cuestión de tales cosas vinculadas a las clases, lo que requerirá un fregado de las entradas de clase, lo cual es un problema. Dudo que alterar metainformación como fuentes RSS, favicons, etc., surta efecto después de la carga.

Sería mejor manejarlo realmente del lado del servidor.

+0

Esta fue una gran explicación y estoy totalmente de acuerdo. Ojalá pudiera, pero esto es para una plataforma que ya tiene funciones y cosas flotando. Mover el JS al lado del servidor sería ideal, pero requeriría grandes cambios en todo. ¡Pero estoy totalmente de acuerdo con tu evaluación! – JsusSalv

+0

Oh, no quise mover el servidor JS, mover los cambios de URL, todo está en el HTML/CSS, por lo que solo tiene que analizarlo y realizar las modificaciones. En ASP.Net puede capturar el evento PreRender, si se trata de PHP, puede usar el almacenamiento en búferes de salida y probablemente rectificar ese tipo de cambio. – Orbling

+0

El búfer de salida es lo que normalmente usaría. Sin embargo, no es una opción ... ¡todavía! – JsusSalv

Cuestiones relacionadas