Sí. La forma más simple es usar expresiones regulares para sustituir elementos que parecen un enlace por sus equivalentes vinculados. Algo así como:
node.innerHTML = node.innerHTML.replace(/(http:\/\/[^\s]+)/g, "<a href='$1'>$1</a>")
(mi RegEx es un poco oxidado, por lo que puede que tenga que jugar con la sintaxis). Este es solo un caso simple. Debe tener cuidado con la inyección de scripts aquí (por ejemplo, si tengo http://"><script>doevil()</script>
). Una forma de evitar esto es mediante el uso de una función de construcción de enlaces:
node.innerHTML = node.innerHTML.replace(/ ... /g, buildLink($1));
Dónde buildLink()
puede comprobar para asegurarse de que la URL no contiene nada malicioso.
Sin embargo, el método RegEx-innerHTML no funcionará muy bien en grandes cantidades de texto, ya que destruye y reconstruye todo el contenido HTML del nodo. Esto se puede conseguir con métodos DOM así:
- Find referencia al nodo de texto
- En el contenido, encontrar comienzan y los índices final de la URL
- Uso
splitText()
método para dividir el nodo en 3: antes, enlace, después de
- Crear un nodo
<a>
con el href
que es lo mismo que el enlace
- uso
insertBefore()
para insertar este nodo <a>
antes del enlace
- Uso
appendChild()
para mover el enlace en el nodo <a>
+1 para el segundo método, mucho más eficiente. –