可编辑的表格。

1.先写一个含有表格的页面jqueryEdit.html:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
         "http://www.w3.org/TR/html4/loose.dtd">
 <html>
 <head>
     <title>jquery示例3:可修改的表格</title>
     <script type="text/javascript" src="jslib/jquery.js"></script>
     <script type="text/javascript" src="jslib/jqueryEditUseBlur.js"></script>
 </head>
 <body>
     <table border="1">
         <tbody>
            <tr>
                <td>1234</td>
                <td>5678</td>
            </tr>
         </tbody>
     </table>
 </body>
 </html>

2.书写一个javaScript脚本文件,来完成表格的可编辑效果,jqueryEdit.js:

这个文件中,当输入框修改完后是按回车键提交的,下面一个文件是通过鼠标相对文本框失去焦点来实现提交的,本人认为下面第二种方法比较合乎实际一点。

//在页面加载的时候,让所有的td有一个点击事件
 $(document).ready(function(){
     var tdNods = $("td");
     tdNods.click(tdClick);
 });//td点击触发的函数
 function tdClick(){
          //1.取出当前td里面的文本内容
          var td = $(this);
          var tdText = td.text();
         //2.清空td里面的文本内容
          td.html(""); //也可以使用td.empty();
         //3.建立一个输入框,也就是input标签
           var input = $("<input>");
         //4.将输入框的内容设为刚才保存的td里面的文本内容
           input.attr("value",tdText);
          //4.5.让文本框能够响应键盘按下的keyup事件,主要是用于处理回车确认
            input.keyup(function(event){
                //1.获取当前用户按下的键值
                   //解决不同浏览器获得事件对象的差异,
                  // IE用自动提供window.event,而其他浏览器必须显示的提供,即在方法参数中加上event
                var myEvent = event || window.event;
                var keyCode = myEvent.keyCode;
                //2.判断是否是回车按下
                if(keyCode == 13){
                    //2.保存当前输入框的内容
                     var input = $(this);
                     var inputText = input.val();//这个地方不能用text(),而是用val()
                    //3.清空td的内容,即去掉输入框
                    var td = input.parent("td");
                    td.empty();
                    //4.将保存的文本内容填充到td中去
                    td.html(inputText);
                    //5.让td重新拥有点击事件
                    td.click(tdClick);
                }
            });
         //5.将输入框加到td中
           td.append(input);  //也可以用input.appendTo(td);
         //5.5 让文本框中的文字被高亮选中
         //需要将jquery对象转化为DOM对象
          var inputDom = input.get(0);
          inputDom.select();
         //6.需要移除td上的点击事件
         td.unbind("click");
 };

 

下面这个脚本文件是通过鼠标相对文本框失去焦点来实现提交的jqueryEditUseBlur.js:

下面用红色显示的是与上面文件不一样的地方。

//在页面加载时候,就使td节点具有click点击能力
 $(document).ready(function(){
     var tdNods = $("td");
     tdNods.click(tdClick);
 });//td的点击事件
 function tdClick(){
     //将td的文本内容保存
     var td = $(this);
     var tdText = td.text();
     //将td的内容清空
     td.empty();
     //新建一个输入框
     var input = $("<input>");
     //将保存的文本内容赋值给输入框
     input.attr("value",tdText);
     //将输入框添加到td中
     td.append(input);
     //给输入框注册事件,当失去焦点时就可以将文本保存起来
     input.blur(function(){
         //将输入框的文本保存
         var input = $(this);
         var inputText = input.val();
         //将td的内容,即输入框去掉,然后给td赋值
         var td = input.parent("td");
         td.html(inputText);
         //让td重新拥有点击事件
         td.click(tdClick);    });
     //将输入框中的文本高亮选中
     //将jquery对象转化为DOM对象
     var inputDom = input.get(0);
     inputDom.select();
     //将td的点击事件移除
     td.unbind("click");
 }

3.对上面的效果进行进一步的修改,使之更加人性化(红色字体是修改过的地方)

通过修改使你在修改的过程中文本的内容可以按Esc键撤销还原到修改前的状态

//在页面加载时候,就使td节点具有click点击能力
 $(document).ready(function(){
     var tdNods = $("td");
     tdNods.click(tdClick);
 });//td的点击事件
 function tdClick(){
     //将td的文本内容保存
     var td = $(this);
     var tdText = td.text();
     //将td的内容清空
     td.empty();
     //新建一个输入框
     var input = $("<input>");
     //将保存的文本内容赋值给输入框
     input.attr("value",tdText);
     //将输入框添加到td中
     td.append(input);
     //给输入框注册事件,当失去焦点时就可以将文本保存起来
     input.blur(function(){
         //将输入框的文本保存
         var input = $(this);
         var inputText = input.val();
         //将td的内容,即输入框去掉,然后给td赋值
         var td = input.parent("td");
         td.html(inputText);
         //让td重新拥有点击事件
         td.click(tdClick);    });
     input.keyup(function(event){
         //1.获取当前用户按下的键值
               //解决不同浏览器获得事件对象的差异,
              // IE用自动提供window.event,而其他浏览器必须显示的提供,即在方法参数中加上event
            var myEvent = event || window.event;
            var keyCode = myEvent.keyCode;
            //2.判断是否是ESC键按下
            if(keyCode == 27){
                //将input输入框的值还原成修改之前的值
                input.val(tdText);
            }
     });
     //将输入框中的文本高亮选中
     //将jquery对象转化为DOM对象
     var inputDom = input.get(0);
     inputDom.select();
     //将td的点击事件移除
     td.unbind("click");
 }