¡¡¡¡ÔÚÏßÑÝʾ£º http://demo.glzy8.com/js/2012/jqueryAutoAddDeleteTableTr/jqueryAutoAddDeleteTableTr_leftClick.html
¡¡¡¡//×ó¼ü
¡¡¡¡
¡¡¡¡<html>
¡¡¡¡<head>
¡¡¡¡<title>jQuery ¶¯Ì¬Ôöɾ±í¸ñ</title>
¡¡¡¡<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
¡¡¡¡<meta http-equiv="Content-Language" content="zh-CN" />
¡¡¡¡<script type="text/javascript" src="http://demo.glzy8.com/jslib/jquery/jquery-1.6.2.min.js"></script>
¡¡¡¡</head>
¡¡¡¡<body>
¡¡¡¡<script type="text/javascript">
¡¡¡¡$(document).ready(function(){
¡¡¡¡var addToTrTop = 10;
¡¡¡¡var addToTrLeft = 534;
¡¡¡¡var preEdit = null;
¡¡¡¡var inputData = '<input id="tmpEditor" type="text" value="?"></input>';
¡¡¡¡var bindListening = function(){
¡¡¡¡//±í¸ñµã»÷ÏìÓ¦
¡¡¡¡$("td").unbind().click(function(){
¡¡¡¡var tdData = $("#tmpEditor").val();
¡¡¡¡if( !$(this).parent().hasClass('editting')) {
¡¡¡¡preEdit&&preEdit.empty().html(tdData.trim(' '));
¡¡¡¡preEdit = null;
¡¡¡¡$("#tmpEditor").parent().empty().html($("#tmpEditor").val());
¡¡¡¡$(".editting").removeClass('editting');
¡¡¡¡}else if( preEdit && (preEdit.parent().children().index($(preEdit)) != $(this).parent().children().index($(this))) ){
¡¡¡¡preEdit.empty().html(tdData.trim(' '));
¡¡¡¡preEdit = null;
¡¡¡¡}else{
¡¡¡¡if(!$("#tmpEditor").val()) {
¡¡¡¡preEdit = $(this);
¡¡¡¡var tdData = $(this).html();
¡¡¡¡$(this).empty().append(inputData.replace('?',tdData));
¡¡¡¡$("#tmpEditor").focus();
¡¡¡¡}
¡¡¡¡}
¡¡¡¡if(!$(this).parent().hasClass('editting')){
¡¡¡¡var tipStyle = 'top:'+(parseInt($(this).offset().top)+addToTrTop)+'px;left:'+(parseInt($(this).parent().offset().left)+addToTrLeft)+'px;';
¡¡¡¡$("#clickTips").attr('style',tipStyle).show();
¡¡¡¡}
¡¡¡¡bindListening();
¡¡¡¡});
¡¡¡¡//ÏòÉÏÔö¼ÓÒ»ÐÐ
¡¡¡¡$("#addUp").unbind().click(function(){
¡¡¡¡doAddTrData($(this),'up');
¡¡¡¡bindListening();
¡¡¡¡});
¡¡¡¡//ÏòÏÂÔö¼ÓÒ»ÐÐ
¡¡¡¡$("#addDown").unbind().click(function(){
¡¡¡¡doAddTrData($(this),'down');
¡¡¡¡bindListening();
¡¡¡¡});
¡¡¡¡//ɾ³ýµ±Ç°ÐÐ
¡¡¡¡$("#delete").unbind().click(function(){
¡¡¡¡doDeleteTrData($(this),'delete');
¡¡¡¡bindListening();
¡¡¡¡});
¡¡¡¡//±à¼µ±Ç°ÐÐ
¡¡¡¡$("#edit").unbind().click(function(){
¡¡¡¡doEditTrData($(this),'edit');
¡¡¡¡bindListening();
¡¡¡¡});
¡¡¡¡var addTrData = $("tr:first").clone(true).attr('class','newAdd');
¡¡¡¡var getIndex = function(clickedTd,type){
¡¡¡¡var fields = $("tr");
¡¡¡¡var addIndex = -1;
¡¡¡¡for(var i=1;i<fields.length;i++){
¡¡¡¡var tipStyle = clickedTd.parent().attr('style');
¡¡¡¡var topValue = 'top: '+(parseInt(fields.eq(i).offset().top)+addToTrTop);
¡¡¡¡var ie_topValue = 'top: '+(parseInt(fields.eq(i).offset().top)+(addToTrTop-2));
¡¡¡¡if((tipStyle.indexOf(topValue) != -1) || (tipStyle.indexOf(ie_topValue) != -1)) {
¡¡¡¡switch(type.toLowerCase()){
¡¡¡¡case 'up':
¡¡¡¡addIndex = i-1;
¡¡¡¡break;
¡¡¡¡case 'down':
¡¡¡¡case 'edit':
¡¡¡¡case 'delete':
¡¡¡¡addIndex = i;
¡¡¡¡break;
¡¡¡¡}
¡¡¡¡}
¡¡¡¡}
¡¡¡¡return addIndex;
¡¡¡¡}
¡¡¡¡var doAddTrData = function(clickedTd,type){
¡¡¡¡if(getIndex(clickedTd,type) == -1) return false;
¡¡¡¡else {
¡¡¡¡var index=getIndex(clickedTd,type);
¡¡¡¡}
¡¡¡¡$("table tr").eq(index).after(addTrData);
¡¡¡¡setTimeout('$(".newAdd").attr("class",null)',1000);
¡¡¡¡$("#clickTips").hide();
¡¡¡¡return false;
¡¡¡¡}
¡¡¡¡var doDeleteTrData = function(clickedTd,type){
¡¡¡¡if(getIndex(clickedTd,type) == -1) return false;
¡¡¡¡else {
¡¡¡¡var index=getIndex(clickedTd,type);
¡¡¡¡}
¡¡¡¡$("table tr").eq(index).remove();
¡¡¡¡$("#clickTips").hide();
¡¡¡¡return false;
¡¡¡¡}
¡¡¡¡var doEditTrData = function(clickedTd,type){
¡¡¡¡if(getIndex(clickedTd,type) == -1) return false;
¡¡¡¡else {
¡¡¡¡var index=getIndex(clickedTd,type);
¡¡¡¡}
¡¡¡¡$("table tr").eq(index).addClass('editting');
¡¡¡¡$("#clickTips").hide();
¡¡¡¡return false;
¡¡¡¡}
¡¡¡¡}
¡¡¡¡bindListening();
¡¡¡¡});
¡¡¡¡</script>
¡¡¡¡<style type="text/css">
¡¡¡¡table{
¡¡¡¡width:580px;
¡¡¡¡margin:0 auto;
¡¡¡¡}
¡¡¡¡td,#tmpEditor{
¡¡¡¡display:block;
¡¡¡¡float:left;
¡¡¡¡border:1px solid #000000;
¡¡¡¡margin:auto 0.5px;
¡¡¡¡width:60px;
¡¡¡¡height:20px;
¡¡¡¡}
¡¡¡¡#clickTips{
¡¡¡¡border:1px solid #000000;
¡¡¡¡position:absolute;
¡¡¡¡left:3px;
¡¡¡¡width:120px;
¡¡¡¡padding:3px;
¡¡¡¡display:none;
¡¡¡¡background-color:#F5FFFA;
¡¡¡¡z-index:3;
¡¡¡¡}
¡¡¡¡span{
¡¡¡¡float:left;
¡¡¡¡width:100px;
¡¡¡¡height:20px;
¡¡¡¡clear:both;
¡¡¡¡}
¡¡¡¡.cloneTr{
¡¡¡¡display:none;
¡¡¡¡}
¡¡¡¡.newAdd td{
¡¡¡¡background-color:#FFFACD;
¡¡¡¡}
¡¡¡¡.editting td{
¡¡¡¡background-color:#F0F0F0;
¡¡¡¡}
¡¡¡¡</style>
¡¡¡¡<div id="tableContainer">
¡¡¡¡<table>
¡¡¡¡<tr class="cloneTr">
¡¡¡¡<td> </td>
¡¡¡¡<td> </td>
¡¡¡¡<td> </td>
¡¡¡¡<td> </td>
¡¡¡¡<td> </td>
¡¡¡¡<td> </td>
¡¡¡¡<td> </td>
¡¡¡¡<td> </td>
¡¡¡¡</tr>
¡¡¡¡<tr>
¡¡¡¡<td> </td>
¡¡¡¡<td> </td>
¡¡¡¡<td> </td>
¡¡¡¡<td> </td>
¡¡¡¡<td> </td>
¡¡¡¡<td> </td>
¡¡¡¡<td> </td>
¡¡¡¡<td>1</td>
¡¡¡¡</tr>
¡¡¡¡<tr>
¡¡¡¡<td> </td>
¡¡¡¡<td> </td>
¡¡¡¡<td> </td>
¡¡¡¡<td> </td>
¡¡¡¡<td> </td>
¡¡¡¡<td> </td>
¡¡¡¡<td> </td>
¡¡¡¡<td>2</td>
¡¡¡¡</tr>
¡¡¡¡<tr>
¡¡¡¡<td> </td>
¡¡¡¡<td> </td>
¡¡¡¡<td> </td>
¡¡¡¡<td> </td>
¡¡¡¡<td> </td>
¡¡¡¡<td> </td>
¡¡¡¡<td> </td>
¡¡¡¡<td>3</td>
¡¡¡¡</tr>
¡¡¡¡<tr>
¡¡¡¡<td> </td>
¡¡¡¡<td> </td>
¡¡¡¡<td> </td>
¡¡¡¡<td> </td>
¡¡¡¡<td> </td>
¡¡¡¡<td> </td>
¡¡¡¡<td> </td>
¡¡¡¡<td>4</td>
¡¡¡¡</tr>
¡¡¡¡<tr>
¡¡¡¡<td> </td>
¡¡¡¡<td> </td>
¡¡¡¡<td> </td>
¡¡¡¡<td> </td>
¡¡¡¡<td> </td>
¡¡¡¡<td> </td>
¡¡¡¡<td> </td>
¡¡¡¡<td>5</td>
¡¡¡¡</tr>
¡¡¡¡<tr>
¡¡¡¡<td> </td>
¡¡¡¡<td> </td>
¡¡¡¡<td> </td>
¡¡¡¡<td> </td>
¡¡¡¡<td> </td>
¡¡¡¡<td> </td>
¡¡¡¡<td> </td>
¡¡¡¡<td>6</td>
¡¡¡¡</tr>
¡¡¡¡</table>
¡¡¡¡</div>
¡¡¡¡<div id="clickTips">
¡¡¡¡<span id="addUp">ÏòÉÏÔö¼ÓÒ»ÐÐ</span>
¡¡¡¡<span id="edit">Ð޸ĵ±Ç°Ò»ÐÐ</span>
¡¡¡¡<span id="addDown">ÏòÏÂÔö¼ÓÒ»ÐÐ</span>
¡¡¡¡<span id="delete">ɾ³ýµ±Ç°ÐÐ</span>
¡¡¡¡</div>
¡¡¡¡</body>
¡¡¡¡</html>
¡¡¡¡jqueryAutoAddDeleteTableTr_rightClick.html
¡¡¡¡//ÓÒ¼ü£¨º¬ÆÁ±Îä¯ÀÀÆ÷ÓÒ¼ü¹¦ÄÜ£©
¡¡¡¡
¡¡¡¡<html>
¡¡¡¡<head>
¡¡¡¡<title>jQuery ¶¯Ì¬Ôöɾ±í¸ñ</title>
¡¡¡¡<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
¡¡¡¡<meta http-equiv="Content-Language" content="zh-CN" />
¡¡¡¡<script type="text/javascript" src="http://demo.glzy8.com/jslib/jquery/jquery-1.6.2.min.js"></script>
¡¡¡¡</head>
¡¡¡¡<body>
¡¡¡¡<script type="text/javascript">
¡¡¡¡$(document).ready(function(){
¡¡¡¡var addToTrTop = 10;
¡¡¡¡var addToTrLeft = 60;
¡¡¡¡var preEdit = null;
¡¡¡¡var inputData = '<input id="tmpEditor" type="text" value="?"></input>';
¡¡¡¡var bindListening = function(){
¡¡¡¡//ÆÁ±Îä¯ÀÀÆ÷ÓÒ¼ü
¡¡¡¡if (window.Event) document.captureEvents(Event.MOUSEUP);
¡¡¡¡function nocontextmenu(e){
¡¡¡¡if(!e) var e=window.event;
¡¡¡¡e.cancelBubble = true
¡¡¡¡e.returnValue = false;
¡¡¡¡return false;
¡¡¡¡}
¡¡¡¡function norightclick(e){
¡¡¡¡if(!e) var e=window.event;
¡¡¡¡if (window.Event){
¡¡¡¡if (e.which == 2 || e.which == 3)
¡¡¡¡return false;
¡¡¡¡}else if (e.keyCode == 2 || e.keyCode == 3){
¡¡¡¡e.cancelBubble = true
¡¡¡¡e.returnValue = false;
¡¡¡¡return false;
¡¡¡¡}
¡¡¡¡}
¡¡¡¡document.oncontextmenu = nocontextmenu; // for IE5+
¡¡¡¡document.onmousedown = norightclick; // for all others
¡¡¡¡//End ÆÁ±Îä¯ÀÀÆ÷ÓÒ¼ü
¡¡¡¡//±í¸ñÓÒ¼üÏìÓ¦
¡¡¡¡$("td").mousedown(function(e){
¡¡¡¡var code;
¡¡¡¡if(!e) var e=window.event;
¡¡¡¡if(e.keyCode) {
¡¡¡¡code=e.keyCode;
¡¡¡¡}else if(e.which){
¡¡¡¡code = e.which;
¡¡¡¡}
¡¡¡¡var tdData = $("#tmpEditor").val();
¡¡¡¡if(code == 3){
¡¡¡¡var tipStyle = 'top:'+(parseInt($(this).offset().top)+addToTrTop)+'px;left:'+(parseInt($(this).offset().left)+addToTrLeft)+'px;';
¡¡¡¡$("#clickTips").attr('style',tipStyle).show();
¡¡¡¡return false;
¡¡¡¡}
¡¡¡¡if(code == 1){
¡¡¡¡if( !$(this).parent().hasClass('editting')) {
¡¡¡¡preEdit&&preEdit.empty().html(tdData.trim(' '));
¡¡¡¡preEdit = null;
¡¡¡¡$("#tmpEditor").parent().empty().html($("#tmpEditor").val());
¡¡¡¡$(".editting").removeClass('editting');
¡¡¡¡}else if( preEdit && (preEdit.parent().children().index($(preEdit)) != $(this).parent().children().index($(this))) ){
¡¡¡¡preEdit.empty().html(tdData.trim(' '));
¡¡¡¡preEdit = null;
¡¡¡¡}else{
¡¡¡¡if(!$("#tmpEditor").val()) {
¡¡¡¡preEdit = $(this);
¡¡¡¡var tdData = $(this).html();
¡¡¡¡$(this).empty().append(inputData.replace('?',tdData));
¡¡¡¡$("#tmpEditor").focus();
¡¡¡¡}
¡¡¡¡}
¡¡¡¡return false;
¡¡¡¡}
¡¡¡¡bindListening();
¡¡¡¡}); //End ±í¸ñÓÒ¼üÏìÓ¦
¡¡¡¡//ÏòÉÏÔö¼ÓÒ»ÐÐ
¡¡¡¡$("#addUp").unbind().click(function(){
¡¡¡¡doAddTrData($(this),'up');
¡¡¡¡bindListening();
¡¡¡¡});
¡¡¡¡//ÏòÏÂÔö¼ÓÒ»ÐÐ
¡¡¡¡$("#addDown").unbind().click(function(){
¡¡¡¡doAddTrData($(this),'down');
¡¡¡¡bindListening();
¡¡¡¡});
¡¡¡¡//ɾ³ýµ±Ç°ÐÐ
¡¡¡¡$("#delete").unbind().click(function(){
¡¡¡¡doDeleteTrData($(this),'delete');
¡¡¡¡bindListening();
¡¡¡¡});
¡¡¡¡//±à¼µ±Ç°ÐÐ
¡¡¡¡$("#edit").unbind().click(function(){
¡¡¡¡doEditTrData($(this),'edit');
¡¡¡¡bindListening();
¡¡¡¡});
¡¡¡¡var addTrData = $("tr:first").clone(true).attr('class','newAdd');
¡¡¡¡var getIndex = function(clickedTd,type){
¡¡¡¡var fields = $("tr");
¡¡¡¡var addIndex = -1;
¡¡¡¡for(var i=1;i<fields.length;i++){
¡¡¡¡var tipStyle = clickedTd.parent().attr('style');
¡¡¡¡var topValue = 'top: '+(parseInt(fields.eq(i).offset().top)+addToTrTop);
¡¡¡¡var ie_topValue = 'top: '+(parseInt(fields.eq(i).offset().top)+(addToTrTop-2));
¡¡¡¡if((tipStyle.indexOf(topValue) != -1) || (tipStyle.indexOf(ie_topValue) != -1)) {
¡¡¡¡switch(type.toLowerCase()){
¡¡¡¡case 'up':
¡¡¡¡addIndex = i-1;
¡¡¡¡break;
¡¡¡¡case 'down':
¡¡¡¡case 'edit':
¡¡¡¡case 'delete':
¡¡¡¡addIndex = i;
¡¡¡¡break;
¡¡¡¡}
¡¡¡¡}
¡¡¡¡}
¡¡¡¡return addIndex;
¡¡¡¡}
¡¡¡¡var doAddTrData = function(clickedTd,type){
¡¡¡¡if(getIndex(clickedTd,type) == -1) return false;
¡¡¡¡else {
¡¡¡¡var index=getIndex(clickedTd,type);
¡¡¡¡}
¡¡¡¡$("table tr").eq(index).after(addTrData);
¡¡¡¡setTimeout('$(".newAdd").attr("class",null)',1000);
¡¡¡¡$("#clickTips").hide();
¡¡¡¡return false;
¡¡¡¡}
¡¡¡¡var doDeleteTrData = function(clickedTd,type){
¡¡¡¡if(getIndex(clickedTd,type) == -1) return false;
¡¡¡¡else {
¡¡¡¡var index=getIndex(clickedTd,type);
¡¡¡¡}
¡¡¡¡$("table tr").eq(index).remove();
¡¡¡¡$("#clickTips").hide();
¡¡¡¡return false;
¡¡¡¡}
¡¡¡¡var doEditTrData = function(clickedTd,type){
¡¡¡¡if(getIndex(clickedTd,type) == -1) return false;
¡¡¡¡else {
¡¡¡¡var index=getIndex(clickedTd,type);
¡¡¡¡}
¡¡¡¡$("table tr").eq(index).addClass('editting');
¡¡¡¡$("#clickTips").hide();
¡¡¡¡return false;
¡¡¡¡}
¡¡¡¡}
¡¡¡¡bindListening();
¡¡¡¡});
¡¡¡¡</script>
¡¡¡¡<style type="text/css">
¡¡¡¡table{
¡¡¡¡width:580px;
¡¡¡¡margin:0 auto;
¡¡¡¡}
¡¡¡¡td,#tmpEditor{
¡¡¡¡display:block;
¡¡¡¡float:left;
¡¡¡¡border:1px solid #000000;
¡¡¡¡margin:auto 0.5px;
¡¡¡¡width:60px;
¡¡¡¡height:20px;
¡¡¡¡}
¡¡¡¡#clickTips{
¡¡¡¡border:1px solid #000000;
¡¡¡¡position:absolute;
¡¡¡¡left:3px;
¡¡¡¡width:120px;
¡¡¡¡padding:3px;
¡¡¡¡display:none;
¡¡¡¡background-color:#F5FFFA;
¡¡¡¡z-index:3;
¡¡¡¡}
¡¡¡¡span{
¡¡¡¡float:left;
¡¡¡¡width:100px;
¡¡¡¡height:20px;
¡¡¡¡clear:both;
¡¡¡¡}
¡¡¡¡.cloneTr{
¡¡¡¡display:none;
¡¡¡¡}
¡¡¡¡.newAdd td{
¡¡¡¡background-color:#FFFACD;
¡¡¡¡}
¡¡¡¡.editting td{
¡¡¡¡background-color:#F0F0F0;
¡¡¡¡}
¡¡¡¡</style>
¡¡¡¡<div id="tableContainer">
¡¡¡¡<table>
¡¡¡¡<tr class="cloneTr">
¡¡¡¡<td> </td>
¡¡¡¡<td> </td>
¡¡¡¡<td> </td>
¡¡¡¡<td> </td>
¡¡¡¡<td> </td>
¡¡¡¡<td> </td>
¡¡¡¡<td> </td>
¡¡¡¡<td> </td>
¡¡¡¡</tr>
¡¡¡¡<tr>
¡¡¡¡<td> </td>
¡¡¡¡<td> </td>
¡¡¡¡<td> </td>
¡¡¡¡<td> </td>
¡¡¡¡<td> </td>
¡¡¡¡<td> </td>
¡¡¡¡<td> </td>
¡¡¡¡<td>1</td>
¡¡¡¡</tr>
¡¡¡¡<tr>
¡¡¡¡<td> </td>
¡¡¡¡<td> </td>
¡¡¡¡<td> </td>
¡¡¡¡<td> </td>
¡¡¡¡<td> </td>
¡¡¡¡<td> </td>
¡¡¡¡<td> </td>
¡¡¡¡<td>2</td>
¡¡¡¡</tr>
¡¡¡¡<tr>
¡¡¡¡<td> </td>
¡¡¡¡<td> </td>
¡¡¡¡<td> </td>
¡¡¡¡<td> </td>
¡¡¡¡<td> </td>
¡¡¡¡<td> </td>
¡¡¡¡<td> </td>
¡¡¡¡<td>3</td>
¡¡¡¡</tr>
¡¡¡¡<tr>
¡¡¡¡<td> </td>
¡¡¡¡<td> </td>
¡¡¡¡<td> </td>
¡¡¡¡<td> </td>
¡¡¡¡<td> </td>
¡¡¡¡<td> </td>
¡¡¡¡<td> </td>
¡¡¡¡<td>4</td>
¡¡¡¡</tr>
¡¡¡¡<tr>
¡¡¡¡<td> </td>
¡¡¡¡<td> </td>
¡¡¡¡<td> </td>
¡¡¡¡<td> </td>
¡¡¡¡<td> </td>
¡¡¡¡<td> </td>
¡¡¡¡<td> </td>
¡¡¡¡<td>5</td>
¡¡¡¡</tr>
¡¡¡¡<tr>
¡¡¡¡<td> </td>
¡¡¡¡<td> </td>
¡¡¡¡<td> </td>
¡¡¡¡<td> </td>
¡¡¡¡<td> </td>
¡¡¡¡<td> </td>
¡¡¡¡<td> </td>
¡¡¡¡<td>6</td>
¡¡¡¡</tr>
¡¡¡¡</table>
¡¡¡¡</div>
¡¡¡¡<div id="clickTips">
¡¡¡¡<span id="addUp">ÏòÉÏÔö¼ÓÒ»ÐÐ</span>
¡¡¡¡<span id="edit">Ð޸ĵ±Ç°Ò»ÐÐ</span>
¡¡¡¡<span id="addDown">ÏòÏÂÔö¼ÓÒ»ÐÐ</span>
¡¡¡¡<span id="delete">ɾ³ýµ±Ç°ÐÐ</span>
¡¡¡¡</div>
¡¡¡¡</body>
¡¡¡¡</html>
¡¡¡¡jqueryAutoAddDeleteTableTr_leftClick_addsearch.html
¡¡¡¡//×ó¼üÌí¼Ó²éѯ¹¦ÄÜ
¡¡¡¡
¡¡¡¡<html>
¡¡¡¡<head>
¡¡¡¡<title>jQuery ¶¯Ì¬Ôöɾ±í¸ñ</title>
¡¡¡¡<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
¡¡¡¡<meta http-equiv="Content-Language" content="zh-CN" />
¡¡¡¡<script type="text/javascript" src="http://demo.glzy8.com/jslib/jquery/jquery-1.6.2.min.js"></script>
¡¡¡¡</head>
¡¡¡¡<body>
¡¡¡¡<script type="text/javascript">
¡¡¡¡$(document).ready(function(){
¡¡¡¡var addToTrTop = 10;
¡¡¡¡var addToTrLeft = 534;
¡¡¡¡var addToTdLeft = 60; //ÈôÉèÖÃaddToTdLeftÔòaddToTrLeftʧЧ
¡¡¡¡var preEdit = null;
¡¡¡¡var inputData = '<input id="tmpEditor" type="text" value="?"></input>';
¡¡¡¡var bindListening = function(){
¡¡¡¡//±í¸ñµã»÷ÏìÓ¦
¡¡¡¡$("td").unbind().click(function(){
¡¡¡¡if($(this).hasClass('search')) return false;
¡¡¡¡var tdData = $("#tmpEditor").val();
¡¡¡¡if( !$(this).parent().hasClass('editting')) {
¡¡¡¡preEdit&&preEdit.empty().html(tdData.trim(' '));
¡¡¡¡preEdit = null;
¡¡¡¡$("#tmpEditor").parent().empty().html($("#tmpEditor").val());
¡¡¡¡$(".editting").removeClass('editting');
¡¡¡¡}else if( preEdit && (preEdit.parent().children().index($(preEdit)) != $(this).parent().children().index($(this))) ){
¡¡¡¡preEdit.empty().html(tdData.trim(' '));
¡¡¡¡preEdit = null;
¡¡¡¡}else{
¡¡¡¡if(!$("#tmpEditor").val()) {
¡¡¡¡preEdit = $(this);
¡¡¡¡var tdData = $(this).html();
¡¡¡¡$(this).empty().append(inputData.replace('?',tdData));
¡¡¡¡$("#tmpEditor").focus();
¡¡¡¡}
¡¡¡¡}
¡¡¡¡if(!$(this).parent().hasClass('editting')){
¡¡¡¡if(!addToTdLeft){
¡¡¡¡var offsetLeft = (parseInt($(this).parent().offset().left)+addToTrLeft);
¡¡¡¡}else {
¡¡¡¡var offsetLeft = (parseInt($(this).offset().left)+addToTdLeft);
¡¡¡¡}
¡¡¡¡var tipStyle = 'top:'+(parseInt($(this).offset().top)+addToTrTop)+'px;left:'+offsetLeft+'px;';
¡¡¡¡$("#clickTips").attr('style',tipStyle).show();
¡¡¡¡}
¡¡¡¡bindListening();
¡¡¡¡});
¡¡¡¡//ÏòÉÏÔö¼ÓÒ»ÐÐ
¡¡¡¡$("#addUp").unbind().click(function(){
¡¡¡¡doAddTrData($(this),'up');
¡¡¡¡bindListening();
¡¡¡¡});
¡¡¡¡//ÏòÏÂÔö¼ÓÒ»ÐÐ
¡¡¡¡$("#addDown").unbind().click(function(){
¡¡¡¡doAddTrData($(this),'down');
¡¡¡¡bindListening();
¡¡¡¡});
¡¡¡¡//ɾ³ýµ±Ç°ÐÐ
¡¡¡¡$("#delete").unbind().click(function(){
¡¡¡¡doDeleteTrData($(this),'delete');
¡¡¡¡bindListening();
¡¡¡¡});
¡¡¡¡//±à¼µ±Ç°ÐÐ
¡¡¡¡$("#edit").unbind().click(function(){
¡¡¡¡doEditTrData($(this),'edit');
¡¡¡¡bindListening();
¡¡¡¡});
¡¡¡¡//²éѯ²Ù×÷
¡¡¡¡$("#searchButton").click(function(){
¡¡¡¡$("#clickTips").hide();
¡¡¡¡var trs = $("#tableContainer").find("tr");
¡¡¡¡var tdLength = trs.eq(0).children('td').length;
¡¡¡¡var RegExp = '';
¡¡¡¡for(var i=0;i<tdLength;i++){
¡¡¡¡RegExp += '[^,]*'+trs.eq(1).find('input').eq(i).val()+'[^,]*,';
¡¡¡¡}
¡¡¡¡//²»¼ÓevalÔòÕýÔòÆ¥ÅäʧЧ
¡¡¡¡RegExp = eval('/' + RegExp.substr(0,RegExp.length-1) + '/i');
¡¡¡¡var stringObject = [];
¡¡¡¡for(var i=2;i<trs.length;i++){
¡¡¡¡stringObject[i] = '';
¡¡¡¡for(var j=0;j<tdLength;j++){
¡¡¡¡stringObject[i] += trs.eq(i).find('td').eq(j).html()+',';
¡¡¡¡}
¡¡¡¡stringObject[i] = stringObject[i].substr(0,stringObject[i].length-1).toString();
¡¡¡¡}
¡¡¡¡for(var i=2;i<trs.length;i++){
¡¡¡¡if(stringObject[i].search(RegExp)) {
¡¡¡¡trs.eq(i).hide();
¡¡¡¡}else{
¡¡¡¡trs.eq(i).show();
¡¡¡¡}
¡¡¡¡}
¡¡¡¡bindListening();
¡¡¡¡});
¡¡¡¡var addTrData = $("tr:first").clone(true).attr('class','newAdd');
¡¡¡¡var getIndex = function(clickedTd,type){
¡¡¡¡var fields = $("tr");
¡¡¡¡var addIndex = -1;
¡¡¡¡for(var i=1;i<fields.length;i++){
¡¡¡¡var tipStyle = clickedTd.parent().attr('style');
¡¡¡¡var topValue = 'top: '+(parseInt(fields.eq(i).offset().top)+addToTrTop);
¡¡¡¡var ie_topValue = 'top: '+(parseInt(fields.eq(i).offset().top)+(addToTrTop-2));
¡¡¡¡if((tipStyle.indexOf(topValue) != -1) || (tipStyle.indexOf(ie_topValue) != -1)) {
¡¡¡¡switch(type.toLowerCase()){
¡¡¡¡case 'up':
¡¡¡¡addIndex = i-1;
¡¡¡¡break;
¡¡¡¡case 'down':
¡¡¡¡case 'edit':
¡¡¡¡case 'delete':
¡¡¡¡addIndex = i;
¡¡¡¡break;
¡¡¡¡}
¡¡¡¡}
¡¡¡¡}
¡¡¡¡return addIndex;
¡¡¡¡}
¡¡¡¡$("#clearSearchButton").click(function(){
¡¡¡¡$("#clickTips").hide();
¡¡¡¡$(".search input[type=text]").val('');
¡¡¡¡$("tr").show();
¡¡¡¡$("tr.cloneTr").hide();
¡¡¡¡})
¡¡¡¡var doAddTrData = function(clickedTd,type){
¡¡¡¡if(getIndex(clickedTd,type) == -1) return false;
¡¡¡¡else {
¡¡¡¡var index=getIndex(clickedTd,type);
¡¡¡¡}
¡¡¡¡$("table tr").eq(index).after(addTrData);
¡¡¡¡setTimeout('$(".newAdd").attr("class",null)',1000);
¡¡¡¡$("#clickTips").hide();
¡¡¡¡return false;
¡¡¡¡}
¡¡¡¡var doDeleteTrData = function(clickedTd,type){
¡¡¡¡if(getIndex(clickedTd,type) == -1) return false;
¡¡¡¡else {
¡¡¡¡var index=getIndex(clickedTd,type);
¡¡¡¡}
¡¡¡¡$("table tr").eq(index).remove();
¡¡¡¡$("#clickTips").hide();
¡¡¡¡return false;
¡¡¡¡}
¡¡¡¡var doEditTrData = function(clickedTd,type){
¡¡¡¡if(getIndex(clickedTd,type) == -1) return false;
¡¡¡¡else {
¡¡¡¡var index=getIndex(clickedTd,type);
¡¡¡¡}
¡¡¡¡$("table tr").eq(index).addClass('editting');
¡¡¡¡$("#clickTips").hide();
¡¡¡¡return false;
¡¡¡¡}
¡¡¡¡}
¡¡¡¡bindListening();
¡¡¡¡});
¡¡¡¡</script>
¡¡¡¡<style type="text/css">
¡¡¡¡table{
¡¡¡¡margin:0 auto;
¡¡¡¡}
¡¡¡¡td,#tmpEditor{
¡¡¡¡display:block;
¡¡¡¡float:left;
¡¡¡¡border:1px solid #000000;
¡¡¡¡margin:auto 0.5px;
¡¡¡¡width:60px;
¡¡¡¡height:20px;
¡¡¡¡}
¡¡¡¡#clickTips{
¡¡¡¡border:1px solid #000000;
¡¡¡¡position:absolute;
¡¡¡¡left:3px;
¡¡¡¡width:120px;
¡¡¡¡padding:3px;
¡¡¡¡display:none;
¡¡¡¡background-color:#F5FFFA;
¡¡¡¡z-index:3;
¡¡¡¡}
¡¡¡¡span{
¡¡¡¡float:left;
¡¡¡¡width:100px;
¡¡¡¡height:20px;
¡¡¡¡clear:both;
¡¡¡¡}
¡¡¡¡.cloneTr{
¡¡¡¡display:none;
¡¡¡¡}
¡¡¡¡.newAdd td{
¡¡¡¡background-color:#FFFACD;
¡¡¡¡}
¡¡¡¡.editting td{
¡¡¡¡background-color:#F0F0F0;
¡¡¡¡}
¡¡¡¡.search{
¡¡¡¡background-color:#dddccc;
¡¡¡¡}
¡¡¡¡.search input{
¡¡¡¡padding-bottom: 0;
¡¡¡¡padding-right: 7px;
¡¡¡¡}
¡¡¡¡.searchButtonTd{
¡¡¡¡float:left;
¡¡¡¡}
¡¡¡¡#searchButton,#clearSearchButton{
¡¡¡¡margin-left: -2px;
¡¡¡¡margin-top: -2px;
¡¡¡¡padding-bottom: 0;
¡¡¡¡padding-right: 20px;
¡¡¡¡}
¡¡¡¡</style>
¡¡¡¡<div id="tableContainer">
¡¡¡¡<table>
¡¡¡¡<tr class="cloneTr">
¡¡¡¡<td> </td>
¡¡¡¡<td> </td>
¡¡¡¡<td> </td>
¡¡¡¡<td> </td>
¡¡¡¡<td> </td>
¡¡¡¡<td> </td>
¡¡¡¡<td> </td>
¡¡¡¡<td> </td>
¡¡¡¡</tr>
¡¡¡¡<tr>
¡¡¡¡<td class="search"><input type="text" size="6"/></td>
¡¡¡¡<td class="search"><input type="text" size="6"/></td>
¡¡¡¡<td class="search"><input type="text" size="6"/></td>
¡¡¡¡<td class="search"><input type="text" size="6"/></td>
¡¡¡¡<td class="search"><input type="text" size="6"/></td>
¡¡¡¡<td class="search"><input type="text" size="6"/></td>
¡¡¡¡<td class="search"><input type="text" size="6"/></td>
¡¡¡¡<td class="search"><input type="text" size="6"/></td>
¡¡¡¡<td class="search searchButtonTd"><input id="searchButton" type="button" size="10" value="²éѯ"/></td>
¡¡¡¡<td class="search searchButtonTd"><input id="clearSearchButton" type="button" size="10" value="Çå³ý"/></td>
¡¡¡¡</tr>
¡¡¡¡<tr>
¡¡¡¡<td>1</td>
¡¡¡¡<td>2</td>
¡¡¡¡<td>3</td>
¡¡¡¡<td>4</td>
¡¡¡¡<td>5</td>
¡¡¡¡<td>6</td>
¡¡¡¡<td>7</td>
¡¡¡¡<td>8</td>
¡¡¡¡</tr>
¡¡¡¡<tr>
¡¡¡¡<td>a</td>
¡¡¡¡<td>b</td>
¡¡¡¡<td>c</td>
¡¡¡¡<td>d</td>
¡¡¡¡<td>e</td>
¡¡¡¡<td>f</td>
¡¡¡¡<td>g</td>
¡¡¡¡<td>h</td>
¡¡¡¡</tr>
¡¡¡¡<tr>
¡¡¡¡<td>A</td>
¡¡¡¡<td>B</td>
¡¡¡¡<td>C</td>
¡¡¡¡<td>D</td>
¡¡¡¡<td>E</td>
¡¡¡¡<td>F</td>
¡¡¡¡<td>G</td>
¡¡¡¡<td>H</td>
¡¡¡¡</tr>
¡¡¡¡<tr>
¡¡¡¡<td>aa</td>
¡¡¡¡<td>bb</td>
¡¡¡¡<td>cc</td>
¡¡¡¡<td>dd</td>
¡¡¡¡<td>ee</td>
¡¡¡¡<td>ff</td>
¡¡¡¡<td>gg</td>
¡¡¡¡<td>hh</td>
¡¡¡¡</tr>
¡¡¡¡<tr>
¡¡¡¡<td>111</td>
¡¡¡¡<td>222</td>
¡¡¡¡<td>333</td>
¡¡¡¡<td>444</td>
¡¡¡¡<td>555</td>
¡¡¡¡<td>666</td>
¡¡¡¡<td>777</td>
¡¡¡¡<td>888</td>
¡¡¡¡</tr>
¡¡¡¡<tr>
¡¡¡¡<td>1a</td>
¡¡¡¡<td>2b</td>
¡¡¡¡<td>3c</td>
¡¡¡¡<td>4d</td>
¡¡¡¡<td>5e</td>
¡¡¡¡<td>6f</td>
¡¡¡¡<td>7g</td>
¡¡¡¡<td>8h</td>
¡¡¡¡</tr>
¡¡¡¡</table>
¡¡¡¡</div>
¡¡¡¡<div id="clickTips">
¡¡¡¡<span id="addUp">ÏòÉÏÔö¼ÓÒ»ÐÐ</span>
¡¡¡¡<span id="edit">Ð޸ĵ±Ç°Ò»ÐÐ</span>
¡¡¡¡<span id="addDown">ÏòÏÂÔö¼ÓÒ»ÐÐ</span>
¡¡¡¡<span id="delete">ɾ³ýµ±Ç°ÐÐ</span>
¡¡¡¡</div>
¡¡¡¡</body>
¡¡¡¡</html>
¡¡¡¡PS:
¡¡¡¡var addToTrTop = 10;
¡¡¡¡var addToTrLeft = 534;
¡¡¡¡var addToTdLeft = 60; //ÈôÉèÖÃaddToTdLeftÔòaddToTrLeftʧЧ
¡¡¡¡±íʾÌáʾDIV clickTips¾àÀ뵱ǰtr¶¥²¿ºÍ×ó²¿µÄÆ«ÒÆÁ¿£¬¿É×ÔÐÐÐ޸ģ¬¿ÉΪ¸ºÊý±íʾÉÏÒÆ»ò×óÒÆ¡£
¡¡¡¡Èí¼þÏÂÔØ£ºÏÂÔØ
¡¡¡¡×÷ÕߣºZjmainstay¡¡¡¡¡¡¡¡
¡¡¡¡³ö´¦£ºhttp://www.cnblogs.com/Zjmainstay/