将 Javascript 数组输出到 DIV
Output Javascript Array into DIV
我有一个函数,它显示/应该从文本区域输出 urls(它应该只列出 urls)。然而目前它只显示了最后的结果/url。我如何输出所有数组/urls(可能输出到 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>
当前输出(使用此代码):
希望(应该):
我不想附加结果,因为文本区域已更改,结果不会更新。 IE:
无论何时更新结果区域,都会覆盖以前的结果。您需要附加到它。
仅供参考: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>
我写了这段代码来解决你的问题。
如果您对代码有任何疑问,请告诉我。
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>
更新
很高兴您找到了解决方案。我添加了一个工作示例-我的解决方案的屏幕截图。
example-screenshot
更新 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>
示例屏幕截图
我有一个函数,它显示/应该从文本区域输出 urls(它应该只列出 urls)。然而目前它只显示了最后的结果/url。我如何输出所有数组/urls(可能输出到 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>
当前输出(使用此代码):
希望(应该):
我不想附加结果,因为文本区域已更改,结果不会更新。 IE:
无论何时更新结果区域,都会覆盖以前的结果。您需要附加到它。
仅供参考: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>
我写了这段代码来解决你的问题。
如果您对代码有任何疑问,请告诉我。
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>
更新
很高兴您找到了解决方案。我添加了一个工作示例-我的解决方案的屏幕截图。
example-screenshot
更新 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>
示例屏幕截图