在表格(td)标签中或div中点击编辑按钮,在原来的位置显示出input输入框进行编辑操作(或者让标签变成可编辑内容)

这两天项目刚上线,新版本的需求项目部还没搞出来,瞄了一眼需求中有个待定的原型图是点击编辑的时候在原来位置出来input输入框进行编辑,刚好这个功能我没做过,我百度百度写了几个demo,这样要是到时候真的要做这个需求,直接复制粘贴就好了

1.首先,第一种效果是编辑写在一个单独的td中,点击编辑,表格的一整行都显示input标签,也有一种是点击编辑,只有编辑前一个兄弟显示input标签。

效果如图所示:

点击编辑td一整行都显示input

点击编辑,只有编辑的前一个兄弟显示input

两种需求的代码在下面有注释,可以根据自己需求选择

代码如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>不在一个td标签中点击编辑出现输入框</title>
    <style type="text/css">
        th{height: 40px;line-height: 40px;}
        td{text-align: center;height: 30px;line-height: 30px;}
        td>a{margin-left: 10px;text-decoration: none;color:#2e88f8;}
     </style>
    <script type="text/javascript" src="js/jquery-1.12.4.min.js"></script>
</head>
<body>
    <table border="1" cellpadding="0" cellspacing="0" width="600px">
      <thead>
        <tr>
          <th>设备名称</th>
          <th>ip地址</th>
          <th>操作</th>
        </tr>
      </thead>
      <tbody>
        <tr>
          <td>LENOVO_PC</td>
          <td>192.168.0.1</td>
          <td><a href="#" class="edit">编辑</a></td>
        </tr>

         <tr>
          <td>LENOVO_PC</td>
          <td>192.168.0.1</td>
          <td><a href="#" class="edit">编辑</a></td>
        </tr>
      </tbody>
    </table>
    <script type="text/javascript">
        // 点击编辑,他的前一个兄弟会出现input输入框
        // $(".edit").click(function(){
        //     var ed = $(this).parent().prev().html("<input type='text' value='"+$(this).parent().prev().text()+"'/>").find('input').focus().blur(function(){    
        //         // 失去焦点的时候移除input输入框
        //         $(this).parent().removeClass('input').html($(this).val() || 0);    
        //     });
        // });

        // 点击编辑,一整行,除编辑外都会出现input输入框
        $(".edit").click(function(){
            var t_this = $(this);
            var list=$(t_this).parent().parent().find("td:lt(2)");
            $.each(list,function(i,obj){
                $(obj).html("<input type='text' value='"+$(obj).text()+"'/>");
            });
        });
    </script>
</body>
</html>

2.第二种效果是编辑按钮和和要编辑的内容在一个td中,点击编辑时修改

效果如下:

编辑和修改内容在一个td中

代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>在一个td标签中点击编辑出现input输入框</title>
    <style type="text/css">
        th{height: 40px;line-height: 40px;}
        td{text-align: center;height: 30px;line-height: 30px;}
        td>a{margin-left: 10px;text-decoration: none;color:#2e88f8;}
     </style>
    <script type="text/javascript" src="js/jquery-1.12.4.min.js"></script>
</head>
<body>
    <table border="1" cellpadding="0" cellspacing="0" width="600px">
      <thead>
        <tr>
          <th>设备名称</th>
          <th>ip地址</th>
          <th>使用人</th>
        </tr>
      </thead>
      <tbody>
        <tr>
          <td><span>LENOVO_PC</span></td>
          <td><span>192.168.0.1</span></td>
          <td><span>哈哈哈</span><a href="#">[编辑]</a> </td>
        </tr>

        <tr>
          <td><span>LENOVO_PC</span></td>
          <td><span>192.168.0.1</span><a href="#">[编辑]</a></td>
          <td><span>小菜鸟</span></td>
        </tr>
      </tbody>
    </table>
    <script>
        $(function(){           
            $('table td a').click(function(){    
                if(!$(this).is('.input')){    
                    $(this).parent().find('span').addClass('input').html('<input type="text" value="'+ $(this).parent().find('span').text() +'" />').find('input').focus().blur(function(){
                    /*
                    //ajax将修改后的数据提交到后台
                    $.ajax({    
                     type: 'POST',    
                     url: 'edit...',    
                     data: ""    
                    });  
                    */
                    // 失去焦点的时候移除input输入框
                    $(this).parent().removeClass('input').html($(this).val() || 0);    

                  });                        
                }    
            }).hover(function(){    
                $(this).addClass('hover');    
            },function(){    
                $(this).removeClass('hover');    
            });    
        });
    </script>
</body>
</html>

3.如果不是表格,是div,写法也差不多

效果如下:

div里面编辑弹出input

代码如下:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>针对div做的操作</title>
  <style type="text/css">
    .clear_fix{clear: both;display:block;content: "";}
    .content{width:800px;margin: 100px auto;}
    .content>div{width:35%;float: left;height: 40px;line-height: 40px;}
    .content>div:nth-child(2n-1){width: 15%;}
    /*.content>div:net-child(2n-1){width: 20%;}
    .content>div:net-child(2n){width: 30%;}*/
    /*.content>div:nth-child(2n){padding-left: 20px;}*/
    .content>div>a{margin-left: 10px;text-decoration: none;color:#2e88f8;}
  </style>
  <script type="text/javascript" src="js/jquery-1.12.4.min.js"></script>
</head>
<body>
  <div class="content clear_fix">
    <div>设备名称:</div>
    <div><span>LENOVO_PC</span><a href="#">[编辑]</a></div>
    <div>设备ip:</div>
    <div><span>192.168.0.1</span><a href="#">[编辑]</a></div>
    <div>使用人:</div>
    <div><span>哈哈哈</span><a href="#">[编辑]</a></div>
    <div>所属部门:</div>
    <div><span>研发部</span><a href="#">[编辑]</a></div>
  </div>
 
  <script>
    $(function(){           
      $('.content>div>a').click(function(){    
        if(!$(this).is('.input')){    
          $(this).parent().find('span').addClass('input').html('<input type="text" value="'+ $(this).parent().find('span').text() +'" />').find('input').focus().blur(function(){
          /*
          //ajax将修改后的数据提交到后台
          $.ajax({    
           type: 'POST',    
           url: 'edit...',    
           data: ""    
          });  
          */
          // 失去焦点的时候移除input输入框
          $(this).parent().removeClass('input').html($(this).val() || 0);    

          });                        
        }    
      }).hover(function(){    
        $(this).addClass('hover');    
      },function(){    
        $(this).removeClass('hover');    
      });    
    });
  </script>
</body>
</html>

最后还有一种简单的方法,就是给标签添加一个属性contenteditable=”true”就可以了。 

<span contenteditable="true">哈哈哈</span>

<div contenteditable="true">哈哈哈</div>

其实代码差不多都一样,根据自己不同的需求进行修好就好了。

  • 10
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
你可以使用 Vue 的指令 `v-if` 和 `v-show` 来实现表格点击变为输入框,和光标移动输入框变为文本框的功能。 首先,你需要在表格添加一个点击事件监听器,将其绑定到一个方法上。在这个方法,你可以使用 `v-if` 指令来切换表格单元格和输入框显示状态。当表格单元格被点击时,将其隐藏并显示输入框;当输入框失去焦点时,将其隐藏并显示表格单元格。 接下来,你需要在输入框添加一个输入事件监听器,将其绑定到另一个方法上。在这个方法,你可以使用 `v-show` 指令来切换输入框和文本框的显示状态。当用户输入框开始输入时,将其隐藏并显示文本框;当用户在文本框点击时,将其隐藏并显示输入框。 下面是一个简单的示例代码: ``` <template> <table> <tbody> <tr> <td v-if="!editing" @click="startEditing">{{ value }}</td> <td v-show="editing"><input type="text" v-model="inputValue" @blur="stopEditing" /></td> </tr> </tbody> </table> </template> <script> export default { data() { return { editing: false, value: '点击输入', inputValue: '', }; }, methods: { startEditing() { this.editing = true; }, stopEditing() { this.editing = false; this.value = this.inputValue; }, }, }; </script> ``` 在这个示例,我们首先定义了一个 `editing` 变量来表示当前单元格是处于编辑状态还是非编辑状态。在单元格被点击时,我们将 `editing` 设置为 `true`,从而显示输入框。在输入框失去焦点时,我们将 `editing` 设置为 `false`,同时将输入框的值赋给 `value`,从而显示文本框。 注意,在这个示例,我们使用了 `v-model` 指令来实现响应式数据绑定。这样,当用户输入框输入内容时,`inputValue` 的值会自动更新,而当我们将 `inputValue` 的值赋给 `value` 时,`value` 的值也会自动更新。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值