网站搜索

javascript - 我能在保留焦点的同时移动 DOM 元素吗?


假设我有一个简单的 HTML 页面,其中有一个 textarea,我想把这个 textarea 包装在一个 DIV 中。然而,这并不总是在启动/页面加载时发生,因此用户可能已经在该区域内有焦点,甚至正在输入。

我可以通过创建一个 DIV,将其附加到 textarea 的父元素,然后把 textarea 放进去,从而移动/包裹这个区域,并且效果很好。然而,当我这样做时,textarea 的焦点会被移除,如果用户正在输入中,他们会很生气。

我如何在不打断用户的情况下移动textarea的DOM节点?这甚至可能吗?

答案#1

根据浏览器的不同,你可能可以使用 document.activeElement 来确定哪个元素具有焦点。在执行移动操作之前保存该值,然后在之后如果 textarea 是与保存的值相同的元素,使用 .focus() 将焦点设置回去。

答案#2

嗯,重新聚焦(使用 focus())是一回事,但你也会希望保持用户的光标在相同的位置(如果他有选区的话,可能还需要保持他的当前选择)。不过这是可能的,可以使用 document.selection/range API,参见 https://developer.mozilla.org/en/DOM/range 。

此链接描述了在 IE 中使用该 API 的一种解决方案(问题略有不同)。