2013-12-06 2 views
3

Я ищу для преобразования текстового списка URL-адресов в интерактивные ссылки.Преобразование текстового списка URL-адресов в интерактивные ссылки HTML

<!DOCTYPE html> 

<body> 
<script> 

// http://stackoverflow.com/questions/37684/how-to-replace-plain-urls-with-links 
function replaceURLWithHTMLLinks(text) { 
    var exp = /(\b(https?|ftp|file):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/ 

%=~_|])/ig; 
    return text.replace(exp,"<a href='$1'>$1</a>"); 
} 

var a1 = document.getElementById("test").innerHTML; 
var a2 = replaceURLWithHTMLLinks(a1); 
document.getElementById("test").innerHTML = a2; 

</script> 

<div id="test"> 
http://www.site.com/ 
http://www.site2.com/ 
http://www.site3.com/ 
</div> 

</body> 
</html> 

Firebug возвращает список сайтов в консоли для:

document.getElementById("test").innerHTML; 

именно:
www.site.com/
www.site2.com/
www.site3.com/

Зачем нужна эта ошибка для строки ниже?

var a1 = document.getElementById("test").innerHTML; 

TypeError: document.getElementById (...) является нулевым

+0

Почему вы хотите это сделать? Если вы пытаетесь очистить URL-адреса, вы можете использовать DOMDocument PHP вместо JavaScript. Лично я редко вижу ссылки на странице, которые не являются фактическими ссылками. – PHPglue

ответ

4

Это потому, что вы пытаетесь получить доступ к элементу, прежде чем он был добавлен так document.getElementById('test') возвращение нуля. Вы можете обернуть его под window.onload или добавить скрипт после элемента html.

Try:

<script> 

// http://stackoverflow.com/questions/37684/how-to-replace-plain-urls-with-links 
function replaceURLWithHTMLLinks(text) { 
    var exp = /(\b(https?|ftp|file):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/ 

%=~_|])/ig; 
    return text.replace(exp,"<a href='$1'>$1</a>"); 
} 

window.onload = function(){ 
    var elm = document.getElementById("test"); 
    var modifiedHtml = replaceURLWithHTMLLinks(elm.innerHTML); 
    elm.innerHTML = modifiedHtml ; 
} 

</script> 
Смежные вопросы