我有一个函数,该函数显示/应该从文本区域输出url(它应该只列出url)。目前,它只显示最后一个结果/网址。我怎么能输出所有的数组/网址(也许成一个div)。
我的代码:
<textarea id="textarea"></textarea>
<div id="converted_url"></div>
<script type="text/javascript">
$("#textarea").on("change keyup paste", function() {
var text=document.getElementById("textarea").value;
var urlRegex = /(https?:\/\/[^\s]+)/g;
text.replace(urlRegex, function(url) {
var link = '<div><a href="' + url + '">' + url + '</a></div>';
document.getElementById("converted_url").innerHTML=link
})
});
</script>
当下输出(带有此代码):
希望(应该):
答案 0 :(得分:1)
无论何时更新结果区域,都将覆盖先前的结果。您需要附加到它。
仅供参考:input
事件是一个广泛的事件,只要对元素的任何输入都会触发。您可能会发现它比监听多个事件更简单明了。另外,由于您使用的是JQuery,因此最好始终使用它来获取所有DOM引用。
let result = $("#converted_url");
$("#textarea").on("input", function() {
result.html(""); // Reset the output
var urlRegex = /(https?:\/\/[^\s]+)/g;
$("#textarea").val().replace(urlRegex, function(url) {
var link = '<div><a href="' + url + '">' + url + '</a></div>';
// Append the new information to the existing information
result.append(link);
});
});
textarea { width:200px; height:50px;}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
(Just type anything in the box to trigger the event.)<br>
<textarea id="textarea">http://google.com blah blah http://facebook.com</textarea>
<div id="converted_url"></div>
答案 1 :(得分:1)
我写了这段代码来解决您的问题。
如果您对代码有任何疑问,请告诉我。
var urlsContainer = $("#converted_url");
var urlsTextArea = $("#textarea");
$("#textarea").on("input", function () {
var text = urlsTextArea.val();
var urls = [];
var raw_urls = text.split('\n');
for (x = 0; x < raw_urls.length; x++) {
if (isValidUrl(raw_urls[x]) && urls.indexOf(raw_urls[x]) < 0) {
urls.push(raw_urls[x]);
}
}
urlsUpdated(urls);
});
function urlsUpdated (urls) {
urlsContainer.html('');
for (x = 0; x < urls.length; x++) {
urlsContainer.append('<div><a href="' + urls[x] + '">' + urls[x] + '</a></div>');
}
}
function isValidUrl(str) {
var regex = /(http|https):\/\/(\w+:{0,1}\w*)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%!\-\/]))?/;
if(!regex.test(str)) {
return false;
}
return true;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<textarea id="textarea"></textarea>
<div id="converted_url"></div>
更新
很好,您已经找到解决方案。我添加了一个有效的示例解决方案的屏幕截图。
更新2.0
let result = $("#converted_url");
$("#textarea").on("input", function() {
result.html(""); // Reset the output
var urlRegex = /(https?:\/\/[^\s]+)/g;
var urls = [];
$("#textarea").val().replace(urlRegex, function(url) {
if (urls.indexOf(url) > -1) {
return;
}
urls.push(url);
});
for (x = 0; x < urls.length; x++) {
var link = '<div><a href="' + urls[x] + '">' + urls[x] + '</a></div>';
result.append(link)
}
});
textarea { width:200px; height:50px;}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
(Just type anything in the box to trigger the event.)<br>
<textarea id="textarea"></textarea>
<div id="converted_url"></div>
示例屏幕截图