Summary:
我试图达到当用户输入 a 时的效果(
or [
在内容可编辑的div
, 第二)
or ]
是自动插入的,并且插入符号位于两者之间,即之间(
and )
.
FIDDLE http://jsfiddle.net/N6xFx/1/
在右侧键入--
s 并看看它在第一行中如何工作,而在第二行中不起作用。
我的努力:
我正在使用这段代码(通过Tim Down https://stackoverflow.com/users/96100/tim-down)以突出显示文本的某些部分并设置光标位置。前者有效,但后者无效:(
function getTextNodesIn(node) { // helper
var textNodes = [];
if (node.nodeType == 3) {
textNodes.push(node);
} else {
var children = node.childNodes;
for (var i = 0, len = children.length; i < len; ++i) {
textNodes.push.apply(textNodes, getTextNodesIn(children[i]));
}
}
return textNodes;
}
function highlightText(el, start, end) { // main
if (el.tagName === "DIV") { // content-editable div
var range = document.createRange();
range.selectNodeContents(el);
var textNodes = getTextNodesIn(el);
var foundStart = false;
var charCount = 0,
endCharCount;
for (var i = 0, textNode; textNode = textNodes[i++];) {
endCharCount = charCount + textNode.length;
if (!foundStart && start >= charCount && (start < endCharCount || (start == endCharCount && i < textNodes.length))) {
range.setStart(textNode, start - charCount);
foundStart = true;
}
if (foundStart && end <= endCharCount) {
range.setEnd(textNode, end - charCount);
break;
}
charCount = endCharCount;
}
var sel = window.getSelection();
sel.removeAllRanges();
sel.addRange(range);
} else { // textarea
el.selectionStart = start;
el.selectionEnd = end;
}
}
Notes:
-
<div>
将有子元素(主要是<br>
s).
- 使用 vanilla JS 仅需要 Chrome 支持
我的问题:
- 为什么上面的功能不起作用?
- 如何让它发挥作用?
我花了几个小时寻找这个并没有发现任何有用的东西。有些是关于孩子开始或结束时的设置div
但对我来说,它可以是任何地点、任何地方。
UPDATE:
感谢大家终于开发完成 https://chrome.google.com/webstore/detail/prokeys/ekfnbpgmmeahnnlpjibofkobpdkifapn!