JS实现双击内容变为可编辑状态

作者:交互手记时间:2026-10-21 23:05:53浏览:534

本文介绍如何使用JavaScript实现双击文本内容即可编辑的功能,重点解决获取焦点后光标位置异常的问题。通过动态创建input元素替换原文本,并精确设置光标起始位置,提升用户编辑体验。

双击编辑功能概述

许多网站具备高交互性的功能,例如用户资料区域支持双击后直接出现文本输入框,用户可在其中输入新资料进行修改,无需额外点击确定按钮。

此前查阅的资料存在一个缺陷:当元素获取焦点时,光标默认位于文本内容的起始位置,导致用户编辑前需手动调整光标位置,交互体验不佳。后续查找到的新方法解决了此问题,旨在帮助更多开发者。

具体代码实现如下:

注意:此处涉及设置选中文本内容或指定光标位置的操作。

核心代码实现与光标定位


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>JS实现双击编辑可修改状态</title>
<meta http-equiv="content-type" content="text/html;charset=utf-8" />
<script type="text/javascript">
  function ShowElement(element) {
    var oldhtml = element.innerHTML;
    //创建新的input元素
    var newobj = document.createElement('input');
    //为新增元素添加类型
    newobj.type = 'text';
    //为新增元素添加value值
    newobj.value = oldhtml;
    //为新增元素添加光标离开事件
    newobj.onblur = function() {
      element.innerHTML = this.value == oldhtml ? oldhtml : this.value;
      //当触发时判断新增元素值是否为空,为空则不修改,并返回原有值 
    }
    //设置该标签的子节点为空
    element.innerHTML = '';
    //添加该标签的子节点,input对象
    element.appendChild(newobj);
    //设置选择文本的内容或设置光标位置(两个参数:start,end;start为开始位置,end为结束位置;如果开始位置和结束位置相同则就是光标位置)
    newobj.setSelectionRange(0, oldhtml.length);
    //设置获得光标
    newobj.focus();
  }
</script>
</head>
<body>
  <dl>
    <dt>你的用户名:</dt>
    <dd ondblclick="ShowElement(this)">三人行</dd>
    <dt>你的个性档</dt>
    <dd ondblclick="ShowElement(this)">三人行,必有我师焉!</dd>
  </dl>
</body>
</html>

触发该功能的事件为双击事件:ondblclick。

以上介绍了利用JavaScript实现双击内容变为可编辑状态的方法,希望能对大家有所帮助。如有疑问欢迎留言,小编会及时回复。感谢大家对本站的支持!

作者最新文章