将Javascript数组输出到DIV

时间:2018-11-04 15:41:10

标签: javascript regex url output textarea

我有一个函数,该函数显示/应该从文本区域输出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>

当下输出(带有此代码):

Output

希望(应该):

enter image description here

我不想附加结果,因为结果没有更新,因此文本区域已更改。 IE: enter image description here

2 个答案:

答案 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>

更新

很好,您已经找到解决方案。我添加了一个有效的示例解决方案的屏幕截图。

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>

示例屏幕截图

screen-shot