文本区域中的selectionStart-End是什么意思?

37

我遇到了一个非常烦人的问题:我似乎无法获取文本区域中所选文本的起始和结束索引,所有我得到的结果都是未定义的,就像这样:

$('#myarea').selectionStart; // return undefined

我做错了什么吗?

2个回答

86

尝试:

$('#myarea')[0].selectionStart;
为什么?jQuery选择器不会返回实际的DOM元素,而是包装后的jQuery集合。jQuery将实际的DOM元素作为数组进行访问,因此如果您想使用第一个匹配的元素(在本例中,由于是按ID匹配的唯一元素),则应执行上述操作。

9
天啊,这些有用但鲜为人知的知识真是太棒了!谢谢。 - MrBrightside
2
这是我早上JS拼图的最后一块。您先生,是我的救命恩人!顺便说一下,对于任何想要在输入字段中自动替换某些字符并保持插入符位置的人:请记得将[0]应用于您的“setSelectionRange”中。 - Raymond

18
自 jQuery 1.6 版本以来,您可以使用 .prop() 方法:
获取:
// always start at 0

var start = $('#myarea').prop('selectionStart');
var end = $('#myarea').prop('selectionEnd');

设置:

$('#myarea').prop('selectionStart', 10);
$('#myarea').prop('selectionEnd', 15);

// or short hand by

$('#myarea').prop({
    'selectionStart': 10,
    'selectionEnd': 15
});

1
不想强加,但这有什么优势超过本地属性吗?O.o 本地属性没有任何兼容性问题,我只看到它会更长,而且肯定也更慢.. - Dennis98

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接