javascript - contentEditable div 替换 url 链接

标签 javascript regex html contenteditable

我有一个 contentEditable DIV,我想用包含在 span 标签内的蓝色文本替换任何用户键入的 URL(通过将字符串与正则表达式匹配)。

但是,不同的浏览器返回不同的结果。此外,用 span 替换匹配的文本会将光标放在文本的开头。 这是链接:jsfiddle

CSS

.class{
    position:relative;
    outline:none;
    border:5px solid #96C;
    font-size:16px; 
    width:500px;
    height:60px;
    padding:0px 2px;
    word-wrap:break-word;  
}

HTML

<div class='class' id='div' contentEditable='true'></div>

JavaScript

var regExUrl = /https?:\/\/([\w\d-\.]+)?[\w\d-\.]+\.{1}[\w]{1,4}(\/{1})?([a-zA-Z0-9&-@_\+.‌​~#?\/=]*)?/gi;

var div = document.getElementById('div');

div.onkeyup = function () {
    if (div.innerHTML.match(regExUrl)) {
        st = div.innerHTML.match(regExUrl);
        div.innerHTML = div.innerHTML.replace(regExUrl, "<span style='color:blue;text-decoration:underline'>" + st[0] + "</span>");

    }
}

如何将光标设置在替换文本的末尾并继续使用默认颜色(黑色)输入?

最佳答案

不是直接回答,而是建议以更简单的方式实现相同用户体验的另一种方法:

http://jsbin.com/EZizIge/1/

var regExUrl = /https?:\/\/([\w\d-\.]+)?[\w\d-\.]+\.{1}[\w]{1,4}((\/{1})?)([a-zA-Z0-9&-@_\+.‌​~#?\/=]*)?/gi;

var div = document.getElementById('div');

div.onkeyup = function(){
  if(div.innerHTML.match(regExUrl)){
   $("div").addClass("link");
  } else {
   $("div").removeClass("link");
  }
}

使用 CSS:

.link{
  text-decoration: underline;
  color: blue;
}

关于javascript - contentEditable div 替换 url 链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21143896/

相关文章:

javascript - 正则表达式问题模式不起作用

jquery - 单击文档时获取事件的父 div

javascript - 检查 JavaScript 命名空间的更好方法

javascript - 我们如何在 Nuxt?Vuejs 项目中仅包含来自 lodash 的必需模块?

javascript - javascript 事件点击后清空输入

html - 使用可适当调整大小的图像创建 flexbox 网格

函数内的javascript优先级

javascript - ESLint 规则只允许每个文件的默认或命名导出

c# - 拆分以逗号分隔的行,注意不要在文本 block 内的逗号上拆分

Java正则表达式匹配url中的模式