我试图在从我的代码中添加一些文本后将Flex TextArea中的插入符移动到最后.我查看了TextArea及其底层TextField的参考文档,但似乎没有提供任何方法来处理它.
我尝试过的一种方法是将焦点设置到文本区域并调度KeyUp KeyboardEvent,并将事件的键代码设置为"End"键,但这不起作用.
关于如何做到这一点的任何想法?
谢谢.
我有两个TEdit控件.当我退出edit1时,edit2会收到焦点.在Edit1的OnExit事件中,我有以下代码:
procedure TForm1.Edit1Exit(Sender: TObject);
begin
edit2.Enabled := false;
edit2.Enabled := true;
edit2.setfocus;
end;
Run Code Online (Sandbox Code Playgroud)
Edit2有焦点.但是,它没有任何关注.我可以开始输入,但它很混乱,因为我不知道哪个控件有焦点.
我更感兴趣的是Enabled属性的翻转会导致某些消息无法正常触发?例如,edit2的OnEnter事件未被触发.
如果重要的话,这是在D2006.
谢谢回复.
为了管理内容可编辑UIWebView中的自动滚动,我需要获得正确的插入符Y垂直坐标.
我使用javascript确定了两种方法.
第一个使用getClientRects javascript函数:
CGRect caretRect = [self.webView stringByEvaluatingJavaScriptFromString: @"
var sel = document.getSelection();
var range = sel.getRangeAt(0).cloneRange();
range.collapse(true);
var r =range.getClientRects()[0];
return '{{'+r.left+','+r.top+'},{'+r.width+','+r.height+'}}';"];
int caretY = caretRect.origin.y;
Run Code Online (Sandbox Code Playgroud)
这样,插入符号一直闪烁,一个问题得到正确的垂直位置,有一个问题:当用户键入返回键时,下一行为空,在键入字符键之前,caretY等于零.这样的方法就无法使用了.
第二个插入一个tmp span,然后将其删除:
int caretY = [[self.webView stringByEvaluatingJavaScriptFromString: @"
var sel = window.getSelection();
sel.collapseToStart();
var range = sel.getRangeAt(0);
var span = document.createElement(\"span\");
range.insertNode(span);
var topPosition = span.offsetTop;
span.parentNode.removeChild(span);
topPosition;"] intValue];
Run Code Online (Sandbox Code Playgroud)
这在任何情况下都给出了正确的照顾.但插入符号停止闪烁,这在屏幕上看起来非常无益.
有没有人知道可以做出以下的任何方法(或这些方法的改编):
- get the correct caret Y in any situation
- keep the caret blinking in any situation
Run Code Online (Sandbox Code Playgroud)
谢谢
我正在通过Text Formatter API创建简单的WPF文本编辑器.我已经完成了一些基本功能,现在我需要添加一个插入支持.我还有一个视觉插入符号(只是一个闪烁动画的行),它应该与渲染文本同步.我在TextLine类中发现了一堆方法,例如GetNextCaretCharacterHit,GetPreviousCaretCharacterHit,GetBackspaceCaretCharacterHit.但是关于它们的文档信息是......非常稀缺.那些在该领域有一些经验的人可以解释如何处理这些方法,因为我几乎不知道这个吗?我试图在互联网上搜索信息,但结果我一无所获.
我将不胜感激任何帮助!
我有这个contentedittable div
<div contenteditable="true" id="text">minubyv<img src="images/smiley/Emoji Smiley-01.png" class="emojiText" />iubyvt</div>
Run Code Online (Sandbox Code Playgroud)
所以我想获得div的插入位置,并假设光标位于最后一个字符之后.这是我获得插入位置的代码
function getCaretPosition(editableDiv) {
var caretPos = 0,
sel, range;
if (window.getSelection) {
sel = window.getSelection();
if (sel.rangeCount) {
range = sel.getRangeAt(0);
if (range.commonAncestorContainer.parentNode == editableDiv) {
caretPos = range.endOffset;
}
}
} else if (document.selection && document.selection.createRange) {
range = document.selection.createRange();
if (range.parentElement() == editableDiv) {
var tempEl = document.createElement("span");
editableDiv.insertBefore(tempEl, editableDiv.firstChild);
var tempRange = range.duplicate();
tempRange.moveToElementText(tempEl);
tempRange.setEndPoint("EndToEnd", range);
caretPos = tempRange.text.length;
}
}
return caretPos;
}
var update …Run Code Online (Sandbox Code Playgroud) 我正在创建一个带有自定义按钮的 TinyMCE 插件,该按钮插入<span>test</span>当前插入符位置。此外,当插入符号位于先前插入的文本中时,再次单击此按钮将删除当前文本<span>test</span>并将其替换为新插入的文本<span>test</span>。
tinymce.PluginManager.add('test_plugin', function(editor) {
editor.addButton('test-button', {
text: 'Insert span',
onclick: function() {
var current_node = editor.selection.getNode();
if(current_node.tagName === 'SPAN') {
current_node.remove();
}
editor.insertContent('<span>test</span>');
}
});
});
Run Code Online (Sandbox Code Playgroud)
它工作得很好,但是插入插入符后<span>test</span>卡在这个跨度节点中,我无法将其移出这个跨度。
 在末尾添加(空格)( <span>test</span> )解决了插入符号卡住的问题,但每次重新插入都会添加多余的空格。
如何解决插入符号卡住问题?
或者
 重新插入时如何删除多余的?
我注意到这个涉及插入符号 (^) 字符的声明被固定在顶部的 cdecl.org 站点上:
// "cast foo into block(int, long long) returning double"
(double (^)(int , long long ))foo
Run Code Online (Sandbox Code Playgroud)
有人可以解释这里插入符号的目的是什么吗?这真的是 C 声明中的有效字符,还是某物的占位符?
我目前正在尝试为Javascript创建一个语法高亮器,我目前面临的问题是我发现创建这样的东西很常见,即在用户键入或编辑 contentEditable 文本时将插入符号位置设置到末尾。
我在 SO 上研究并发现了这个和许多其他解决方案,但没有一个有效。它获取插入符号的位置,但从不重置它,因此我试图找到解决此问题的方法。
下面是我想出的代码。
html
<div id="editor" contentEditable="true" onkeyup="resetPosition(this)"></div>
<input type="text" onkeyup="resetPosition(this)" />
Run Code Online (Sandbox Code Playgroud)
js
function getPos(e) {
// for contentedit field
if (e.isContentEditable) {
e.focus()
let _range = document.getSelection().getRangeAt(0)
let range = _range.cloneRange()
range.selectNodeContents(e)
range.setEnd(_range.endContainer, _range.endOffset)
return range.toString().length;
}
// for texterea/input element
return e.target.selectionStart
}
function setPos(pos, e) {
// for contentedit field
if (e.isContentEditable) {
e.focus()
document.getSelection().collapse(e, pos);
return
}
e.setSelectionRange(pos, pos)
}
function resetPosition(e) {
if(e.isContentEditable) {
let currentPosition = …Run Code Online (Sandbox Code Playgroud) 我一直在尝试使用 bootstrap 4 从 NavDropdown 组件中删除插入符号并做出反应,但是我没有运气。这是我的反应和CSS,不知道出了什么问题。谢谢。
<Navbar expand="lg">
<Navbar.Toggle aria-controls="basic-navbar-nav" />
<Navbar.Collapse id="basic-navbar-nav">
<Nav className="mr-auto">
<NavDropdown title="ENGAGEMENT" id="basic-nav-dropdown" show={false} className="noCaret">
<NavDropdown.Item href="#action/3.1">Action</NavDropdown.Item>
<NavDropdown.Item href="#action/3.2">Another action</NavDropdown.Item>
<NavDropdown.Item href="#action/3.3">Something</NavDropdown.Item>
<NavDropdown.Divider />
<NavDropdown.Item href="#action/3.4">Separated link</NavDropdown.Item>
</NavDropdown>
</Nav>
</Navbar.Collapse>
</Navbar>
Run Code Online (Sandbox Code Playgroud)
.caret {
display: none !important;
}
.navbar .dropdown-menu:after{
display:none !important;
}
.dropdown-toggle.noCaret:after {
display: none !important;
Run Code Online (Sandbox Code Playgroud) 在这篇SO post 之后,我可以将插入符号放在一个span元素中,该元素位于div contenteditable="true".
我可以span通过它的来定位我想要的任何对象id,同时还可以决定插入符号应该放在哪个字符之后。
但是如何将插入符号放置在没有文本的跨度内?
只需按原样使用该函数,就会出现此错误: TypeError: Range.setStart: Argument 1 is not an object.
此外,出于某种原因,当span有内容时,它在 Firefox 中运行良好。但不是在 Chrome 中,插入符号放在span. 有什么办法也可以解决这个问题?
我对 jQuery 持开放态度,如果它能让事情变得更容易的话。
这是我的代码:
function setCaret(x, y) {
var element = document.getElementById(x);
var range = document.createRange();
var node;
node = document.getElementById(y);
range.setStart(node.childNodes[0], 0);
var sel = window.getSelection();
range.collapse(true);
sel.removeAllRanges();
sel.addRange(range);
element.focus();
}Run Code Online (Sandbox Code Playgroud)
body {
font-family: sans-serif;
}
input {
margin-bottom: 5px;
padding: 3px;
} …Run Code Online (Sandbox Code Playgroud)caret ×10
javascript ×4
html ×2
jquery ×2
.net ×1
apache-flex ×1
bootstrap-4 ×1
c ×1
c# ×1
coordinates ×1
declaration ×1
delphi ×1
flex3 ×1
getcaretpos ×1
ios ×1
navbar ×1
reactjs ×1
setfocus ×1
text-editor ×1
textarea ×1
textfield ×1
tinymce ×1
uiwebview ×1
wpf ×1