js如何获取光标在textarea中的坐标呢(不是索引)

目前可以获取到光标在textarea中的索引值了,但是不是很明白该如何去获取到光标所在的x,y值(因为需要在光标下方弹个选择框),求大神指点。

阅读 8.2k
3 个回答

http://ioing.com/#docs-dom-input

页面最底部

Element.prototype.extendProperty("getSelectionRangeOffset", function (pos) {

switch (this.nodeName) {
    case 'INPUT':
    case 'TEXTAREA':
        var offset = this.offset()
        var position = this.getSelectionRangePosition(pos)

        return offset = {
            left: offset.left + position.left,
            top: offset.top + position.top,
            height: position.height
        }

    break

    case 'HTMLAREA':

        var oWindow = this.ownerDocument.defaultView
        var oDocument = oWindow.document

        var selection = this.getOwnerSelection()
        var range = this.getSelectionRange(selection)

        var clonedRange, offset, rect, shadowCaret

        if ( range ) {

            range.collapse(false)

            if ( range.endOffset - 1 > 0 && range.endContainer !== this ) {
                clonedRange = range.cloneRange()
                clonedRange.setStart(range.endContainer, range.endOffset - 1)
                clonedRange.setEnd(range.endContainer, range.endOffset)
                rect = clonedRange.getBoundingClientRect()
                offset = {
                    height: rect.height,
                    left: rect.left + rect.width,
                    top: rect.top
                }
                clonedRange.detach()
            }

            if ( !offset || (offset != null ? offset.height : void 0) === 0) {
                clonedRange = range.cloneRange()
                shadowCaret = oDocument.createTextNode("|")
                clonedRange.insertNode(shadowCaret)
                clonedRange.selectNode(shadowCaret)
                rect = clonedRange.getBoundingClientRect()
                offset = {
                    height: rect.height,
                    left: rect.left,
                    top: rect.top
                }
                shadowCaret.remove()
                clonedRange.detach()
            }
        }

        offset.left += top.scrollX
        offset.top += top.scrollY

        return offset

    break
}

})

楼主有解决这个问题?跪求指点,项目遇到同样需求了

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题