在删除或保存after元素后,Jquery删除bg

时间:2017-03-09 11:10:44

标签: javascript jquery jquery-ui datatables

问题:

班级:名称 - 突出显示 - 悬停,即使我没有编辑该行,它也会应用于列成员的每个td

如果td有input或者我正在编辑行

应该适用

从表1中的表2中删除名称后,应删除 name-highlight-hover 类,现在没有任何事情发生

如果我保存,则应删除该课程:名称 - 突出显示 - 悬停

进行测试:

点击表1中的按钮编辑

jsfiddle:http://jsfiddle.net/f7debwj2/51/

我认为问题在于:

 "drawCallback": function(settings) {

   setTimeout(function() {

     $('#example2 tr').draggable({
       drag: function(event) {

         var ctrl = $(document.elementsFromPoint(event.clientX, event.clientY)).filter('#example tr td:nth-child(2),input.border-highlight');

         $('.name-highlight-hover').removeClass('name-highlight-hover');
         if (ctrl.length > 0) {
           ctrl.addClass('name-highlight-hover animated  bounceIn');

         } else {
           ctrl.removeClass('name-highlight-hover');
         }

       }
     });

   })

 }

我的代码剪断是经纪,请尝试jsfiddle

 $(document).ready(function() {
 var dataUrl = 'http://www.json-generator.com/api/json/get/ccTtqmPbkO?indent=2';
var options = [
  { key : 'option 1', value : 1 },
  { key : 'option 2', value : 2 },
  { key : 'option 3', value : 3 }
];

var rowCache = [];

function mouseUp(event)
{
	var ctrl = $(document.elementsFromPoint(event.clientX, event.clientY)).filter('input.border-highlight');
		
	if (ctrl.length > 0 && rowCache.length > 0)
	{console.log(ctrl);
		var el = rowCache[0];
		var data = el.row.data();
		
		if (data.length > 0)
		{
			ctrl.val(data[0].name);
			el.row.remove().draw();
		}
	}	
	
	rowCache = [];
	$('#example tr td:nth-child(2) input').removeClass('border-highlight');
}

$(document).ready(function() {
  var $table = $('#example');
  var dataTable = null;

  $('body').mouseup(mouseUp);
  
  $table.on('mousedown', 'td .fa.fa-minus-square', function(e) {
    dataTable.row($(this).closest("tr")).remove().draw();
  });

  $table.on('mousedown.edit', 'i.fa.fa-pencil-square', function(e) {
    enableRowEdit($(this));
  });

  $table.on('mousedown', 'input', function(e) {
    e.stopPropagation();
  });

  $table.on('mousedown.save', 'i.fa.fa-envelope-o', function(e) {
    updateRow($(this), true); // Pass save button to function.
  });

  $table.on('mousedown', '.select-basic', function(e) {
    e.stopPropagation();
  });

  dataTable = $table.DataTable({
    ajax: dataUrl,
    rowReorder: {
      dataSrc: 'order',
      selector: 'tr'
    },
    columns: [{
      data: 'order'
    }, {
      data: 'name'
    }, {
      data: 'place'
    }, {
      data: 'delete'
    }]
  });

  $table.css('border-bottom', 'none')
        .after($('<div>').addClass('addRow')
          .append($('<button>').attr('id', 'addRow').text('Add New Row')));

  // Add row
  $('#addRow').click(function() {
    var $row = $("#new-row-template").find('tr').clone();
    dataTable.row.add($row).draw();
    // Toggle edit mode upon creation.
    enableRowEdit($table.find('tbody tr:last-child td i.fa.fa-pencil-square'));
  });

  $('#btn-save').on('click', function() {
    updateRows(true); // Update all edited rows
  });

  $('#btn-cancel').on('click', function() {
    updateRows(false); // Revert all edited rows
  });

  function enableRowEdit($editButton) {
    $editButton.removeClass().addClass("fa fa-envelope-o");
    var $row = $editButton.closest("tr").off("mousedown");

    $row.find("td").not(':first').not(':last').each(function(i, el) {
      enableEditText($(this))
    });

    $row.find('td:first').each(function(i, el) {
      enableEditSelect($(this))
    });
  }
  
  function enableEditText($cell) {
    var txt = $cell.text();
    $cell.empty().append($('<input>', {
      type : 'text',
      value : txt
    }).data('original-text', txt));
  }

  function enableEditSelect($cell) {
    var txt = $cell.text();
    $cell.empty().append($('<select>', {
      class : 'select-basic'
    }).append(options.map(function(option) {
      return $('<option>', {
        text  : option.key,
        value : option.value
      })
    })).data('original-value', txt));
}

  function updateRows(commit) {
     $table.find('tbody tr td i.fa.fa-envelope-o').each(function(index, button) {
      updateRow($(button), commit);
    });
  }

  function updateRow($saveButton, commit) {
    $saveButton.removeClass().addClass('fa fa-pencil-square');
    var $row = $saveButton.closest("tr");

    $row.find('td').not(':first').not(':last').each(function(i, el) {
      var $input = $(this).find('input');
      $(this).text(commit ? $input.val() : $input.data('original-text'));
    });

    $row.find('td:first').each(function(i, el) {
      var $input = $(this).find('select');
      $(this).text(commit ? $input.val() : $input.data('original-value'));
    });
  }
});

 $(document).ready(function() {
    	 var url = 'http://www.json-generator.com/api/json/get/bXcKDeAbyq?indent=2';
      table = $('#example2').DataTable({
        ajax: url,
        order: [[ 0, "desc" ]],
        rowReorder: {
          dataSrc: 'place',
          selector: 'tr'
        },
        columns: [ {
          data: 'name'
        }],
        "drawCallback": function(settings) {
           
               		setTimeout(function(){

			$('#example2 tr').draggable({
				drag: function(event){

					var ctrl = $(document.elementsFromPoint(event.clientX, event.clientY)).filter('#example tr td:nth-child(2),input.border-highlight');

					$('.name-highlight-hover').removeClass('name-highlight-hover');
					if (ctrl.length > 0 ) {
						ctrl.addClass('name-highlight-hover');
					}

				}
			});

		})
    
        }
      });		
	  
		table.on('mousedown', 'tbody tr', function () {
			var $row = $(this);
			
			var r = table.rows(function (i, data) {
				return data.name == $row.children().first().text();
			});

			if (r[0].length > 0)
			{
				$row.parents('table').find('tr').removeClass('highlight');
				$row.addClass('highlight');
				$('#example tr td:nth-child(2) input').addClass('border-highlight');		
			}			

			rowCache.push({ row: r });
		});
       
	  
    });
    
});
div.addRow{
      line-height: 45px;
    background-color: #fff;
    padding-left: 10px;
    border-bottom: 1px solid;
    border-top: 1px solid #e5e5e5;}
	
	tr.highlight td {
		background-color: #D0ECE7 !important;
	}
  
  td.name-highlight-hover {
	  background-color: #D0ECE7 !important;
	}
	
	.border-highlight {
		border-color: #D0ECE7 !important;
		border-width: 3px;
	}
        <script src="//ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
        <script src="//cdn.datatables.net/1.10.13/js/jquery.dataTables.min.js"></script>
        <script src="//cdn.rawgit.com/DataTables/RowReorder/ce6d240e/js/dataTables.rowReorder.js"></script>
       <script src="////code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
        <link href="//cdn.datatables.net/1.10.13/css/jquery.dataTables.min.css" rel="stylesheet" />
        <link href="//cdn.datatables.net/rowreorder/1.2.0/css/rowReorder.dataTables.min.css" rel="stylesheet"/>
        <link href="//maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet" />
        <link href="//maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet" />

<table id="example" class="display" width="100%" cellspacing="0">
  <thead>
    <tr>
      <th>order</th>
      <th>name</th>
      <th>country</th>
      <th>action</th>
    </tr>
  </thead>
</table>

<table id="new-row-template" style="display:none">
  <tbody>
    <tr>
      <td>999</td> <!-- Use a large number or row might be inserted in the middle -->
      <td>__NAME__</td>
      <td>__COUNTRY__</td>
      <td>
        <i class="fa fa-pencil-square" aria-hidden="true"></i>
        <i class="fa fa-minus-square" aria-hidden="true"></i>
      </td>
    </tr>
  </tbody>
</table>
<br>
<div class="pull-right">
  <button type="button" id="btn-cancel" class="btn btn-default" data-dismiss="modal">Cancel</button>
  <button type="button" id="btn-save" class="btn btn-primary" data-dismiss="modal">Save</button>
</div>

<br>
<br>
<h1>
 table 2
</h1><br>
<br>
<table id="example2" class="display" width="100%" cellspacing="0">
  <thead>
    <tr>
      <th> name</th>
    </tr>
  </thead>
</table>

0 个答案:

没有答案