- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
用 a 标签替换效果很好,但它会将我设置到可编辑 div 内的第一个位置。
我该如何解决这个问题?我如何才能触发一个事件,我目前将我的插入符号放在一个标签内,就像 Twitter 那样?
function replacer(match, p1, p2, p3, offset, string) {
var name = '';
var user = '';
$.each(ar.data, function (i, item) {
var keyword = match.substring(1, (match.length - 1));
if (keyword == item.name) {
user = item.user;
name = item.name;
}
});
return '<a href="/' + user + '">' + name + '</a>';
}
$(document).ready(function (e) {
$('body').on('keyup', '#cont', function (e) {
var cont = $('#cont').html();
var cont2 = cont.replace(/\@\w+\s/gi, replacer);
$('#cont').html(cont2);
console.log($('#cont').html());
});
});
var ar = {
"data": [{
"user": "testuser1",
"name": "testname1"
}, {
"user": "testuser2",
"name": "testname2"
}]
};
console.log(ar);
最佳答案
在我尝试这个之前有几件事:
请不要将元素作为字符串添加到 dom - “return ..”。您将很难使用此节点执行其他操作。相反,我建议您使用 DOM API(创建/删除/替换/附加/等)来执行这些功能。当您通读时,我的建议会很清楚。
您返回一个新字符串并盲目地将 HTML 设置为该特定字符串 - 您将丢失它之前的所有文本。示例:Hello my name is @testuser1 变成了 @- 你失去了“Hello my name is”
解决方法:
要照顾胡萝卜的放置,您必须记住用户的选择。注意 - 如果您更改 HTML,浏览器将丢失此选择;因此,您需要手动跟踪它。
在“替换”文本之前,您可以通过以下方式获得选择:
//IE & Others
if (window.getSelection) {
userSelection = window.getSelection();
} else if (document.selection) {
userSelection = document.selection.createRange();
}
selectedNode = userSelection.anchorNode;
selectedOffset = userSelection.anchorOffset;
替换文本后,您需要将选择设置回容器。
//IE & Others
var range,
selection;
if (window.getSelection) {
selection = window.getSelection();
range = document.createRange();
range.setStart(targetElement, targetOffset);
range.setEnd(targetElement, targetOffset);
selection.removeAllRanges();
selection.addRange(range);
} else if (document.selection) {
range = document.selection.createRange();
range.moveToElementText(targetElement.parentElement);
range.collapse(true);
range.moveEnd('character', targetOffset);
range.moveStart('character', targetOffset);
range.select();
}
}
目标元素和目标偏移量是您要定位的节点和您希望光标所在的位置(从左侧开始)。
既然基础知识已经完成,那么困难的部分来了:
当您通过放入 anchor 元素来分解文本 (TextNode) 时,您需要将目标元素作为 anchor 元素,并将偏移量设为 anchor 元素内文本的长度。如果您使用 DOM API 并将此元素存储为变量,这会容易得多。
您需要迎合用户可能转到文本的任何部分并输入@username1 的情况;这应该相当简单。
您也可以使用 Rangy JS 库来实现这一点。
玩得开心!
关于javascript - 像 twitter 一样将插入符号放在可编辑的 div 的末尾,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18274285/
我当前项目中的许多类都有几个只能从类本身内部调用的属性和方法。此外,根据类(class)的当前状态,它们可能会扰乱类(class)的工作。 目前,所有这些接口(interface)都在 .h 文件的主
我想使用ngbTabSet将nav-pills in card-header 和tab-content in card-body。但我不知道该怎么做。 这是我尝试实现的示例(使用 bootstrap.
我正在浏览文档以查找如何允许放置在停靠栏图标上。据我所知,建议您使用 LSItemContentTypes,因为 CFBundleTypeOSTypes 已弃用。但是,我无法让 LSItemConte
我正在尝试在书签中使用 jquery UI 作为 slider 。并且 jquery ui 要求在普通 jquery 文件之后包含该文件。 所以到目前为止我所尝试的只是将脚本附加到 header ,同
您好,我尝试了广泛的谷歌搜索,但似乎没有任何帮助。 这是我的场景: 公司 Logo 存储在外部域/网址(矩形)中。 带有谷歌地图的 Ionic 应用程序,将这些 Logo 作为标记放置在 map 上。
我今天在阅读我的一些 C# 代码时发现了这一行: if (ProgenyList.ItemContainerGenerator.Status != System.Windows.Controls.Pr
我刚遇到this question在 Go FAQ 中,它让我想起了困扰我一段时间的事情。不幸的是,我真的不明白答案是什么。 似乎几乎所有非 C 类语言都将类型放在变量名之后,如下所示: var :
这是有效的 HTML 吗? 最佳答案 作为元素可以包含 phrasing content ,以及属于该组,则有效。 从语义上(并且具有一些常识),如果唯一的内容是 , 不;如果它同时包含文本和图像
这是有效的 HTML 吗? 最佳答案 作为元素可以包含 phrasing content ,以及属于该组,则有效。 从语义上(并且具有一些常识),如果唯一的内容是 , 不;如果它同时包含文本和图像
我有两本 T.Parr 写的关于 ANTLR 的书,我到处都看到美元符号和符号的引用。它也对我有用: term : IDENT -> { new TokenNode($IDENT) }; 或更复杂的东
我在实现段控制时遇到了一些问题。因为我希望它是一个固定的标题,所以当我滚动时我总是可以看到它,我已经在 - (UIView *)tableView:(UITableView *)tableView v
我有一个 20x36px (10x18pt) 的箭头图像,当我选择一个 UIImageView 时,将它拖到我的 View Controller 上然后设置图像,它总是模糊的。我只在我的项目中包含 @
How can I put background image when I hover a link Insert Bg in this a when hov
我需要在我的 .container 中添加(最新的第一个)新分区,但在 .controls (按钮)之后。可能吗? 注意:添加新的分区来保存按钮下方的前置控件对我来说不是一个选择。 HTML 需要保持
我是一名优秀的程序员,十分优秀!