假设我有这个HTML元素:
<div id="parent">
Hello everyone! <a>This is my home page</a>
<p>Bye!</p>
</div>
Run Code Online (Sandbox Code Playgroud)
用户用鼠标选择"家".
我希望能够确定#parent他的选择中有多少个字符开始(以及#parent他选择结束时有多少个字符结束).即使他选择了HTML标记,这也应该有效.(我需要它在所有浏览器中工作)
range.startOffset 看起来很有希望,但它只是相对于范围的直接容器的偏移量,并且仅当容器是文本节点时才是字符偏移量.
我正在使用jquery-ui的Autocomplete.在多个值中,您可以获得空格后每个单词的下拉列表,但下拉列表显示为输入框的大小.是否有可能使下拉列表出现在每个光标下方,其宽度等于下拉字而不是输入框的整个长度?
编辑:示例(类似Google的搜索框):
当你去谷歌并在句子继续时输入一个长句子,在每个单词之后,为光标位置下方的每个单词出现一个自动完成下拉列表.所以我需要一个类似的下拉列表,可以添加到jQuery Autocomplete上

我的功能很大,因为它具有多个单词的功能,并按字母顺序显示数组.这是<script代码:
<script>
$(function() {
var availableTags = <?php echo json_encode($sometags); ?>;
function split( val ) {
return val.split( / \s*/ );
}
function extractLast( term ) {
return split( term ).pop();
}
$( "#query" )
// don't navigate away from the field on tab when selecting an item
.bind( "keydown", function( event ) {
if ( event.keyCode === $.ui.keyCode.TAB &&
$( this ).data( "autocomplete" ).menu.active ) {
event.preventDefault();
}
})
.autocomplete({
minLength: …Run Code Online (Sandbox Code Playgroud) 鉴于textarea的内容是这样的
––––––––––––––––––––––––––
| This is some text, which |
| wraps like this. |
––––––––––––––––––––––––––
如何判断文本光标是否位于textarea的第一行?
显然,\n如果想要查看光标是否出现在第一个换行符之前,检查换行符()是否有效,但测试"软"换行符似乎更具挑战性.
我还没有提出一个策略,但我怀疑它可能涉及复制文本直到光标位置进入克隆的textarea(或div),并且只要需要它就使宽度变宽,这样它就不会包装.如果克隆区域的宽度小于原始宽度,则光标似乎必须位于第一行.可能有一个更简单的选择,更优雅的东西,或(最重要的)现有的,经过良好测试的解决方案.
目标浏览器是Webkit(Chrome/Safari)和Firefox.即IE兼容性在这个时候不是一个问题(如果这有任何区别).
谢谢阅读.
falsarella给出了一个很好的答案,突出了问题的模糊性.我想要的是文本光标("插入符号"可能是一个更好的词)是否在第一行.我已经更新了问题和jsFiddle来反映.
如何在某个位置(选择)拆分节点/元素.
示例我有这个标记:
<p>This is <a href="">a te|st</a>, you like?</p>
Run Code Online (Sandbox Code Playgroud)
(此管道代表位置/选择)
我想将其转换为:
<p>This is <a href="">a te</a></p>|<p><a href="">st</a>, you like?</p>
Run Code Online (Sandbox Code Playgroud)
保持选择.
有任何想法吗?
我使用Rangy库和jQuery,但如果适用的话可以使用原始JS.
javascript ×3
jquery ×3
autocomplete ×1
dom ×1
html ×1
jquery-ui ×1
rangy ×1
textarea ×1
textrange ×1