»ùÓÚjQueryµÄ¶¯Ì¬Ôöɾ¸Ä²é±í¸ñÐÅÏ¢£¬¿É×ó¼ü/ÓÒ¼üÌáʾ£¨Ô­´´×ÔZjmainstay£©

¡¡¡¡ÔÚÏßÑÝʾ£º 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/