Я пишу приложение поддержки чата, где я хочу, чтобы текст анализировался на URL. Я нашел ответы на похожие вопросы, но ничего на следующее.
что у меня есть
function ReplaceUrlToAnchors(text) {
var exp = /(\b(https?:\/\/|ftp:\/\/|file:\/\/|www.)
[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/ig;
return text.replace(exp,"<a href='$1' target='_blank'>$1</a>");
}
этот шаблон является модифицированной версией, которую я нашел в интернете. Включает в себя www. в первом токене, потому что не все URL начинаются с протокола: // Однако, когда www.google.com заменяется на
<a href='www.google.com' target='_blank'>www.google.com</a>
, который подтягивает MySite.com/webchat/wwww.google.com, и я получаю 404
это моя первая проблема, моя вторая ...
в моем скрипте для генерации сообщений в журнал я вынужден сделать это хакерским способом:
var last = 0;
function UpdateChatWindow(msgArray) {
var chat = $get("MessageLog");
for (var i = 0; i < msgArray.length; i++) {
var element = document.createElement("div");
var linkified = ReplaceUrlToAnchors(msgArray[i]);
element.setAttribute("id", last.toString());
element.innerHTML = linkified;
chat.appendChild(element);
last = last + 1;
}
}
Чтобы получить строку со ссылками для корректного отображения HTML, я должен использовать нестандартный атрибут .innerHTML элемента. Я бы предпочел способ, которым я мог бы анализировать строку как токены - текстовые токены и токены привязки - и вызывать либо createTextNode или createElement ("a") и сшивать их вместе с DOM.
Итак, вопрос 1: как мне разбирать www.site.com или даже site.com?
и вопрос 2: как бы я мог сделать это, используя только DOM?