Inicio > Ajax, OpenSource, bd, borrar, tabla > Borrar filas de una tabla en HTML y en la BD

Borrar filas de una tabla en HTML y en la BD

Viernes, 26 de octubre de 2007 Juan Jorquera Dejar un comentario Ir a comentarios

Original de Sentidoweb.com

Ayer contábamos como borrar una fila de una tabla en HTML, y en los comentarios, Escael nos preguntaba cómo se podría hacer para que también se borrara de la base de datos.

Pues siguiendo con el modo en que se hace en la administración de WordPress, primero haremos el difuminado del color actual de la fila al color rojo y mientras se realiza el borrado en la tabla de la base de datos, haremos que parpadee el color de la fila.

Cuando se haya realizado el borrado en la tabla de la base de datos, se eleminará la fila de la tabla HTML y se mostrará un mensaje de aviso de que se ha borrado de la BD.

El código es casi el mismo que en la entrada anterior, salvo que en esta entrada se incluye AJAX para la ejecución del script PHP que borra el registro de la tabla. A parte, también habrá una función nueva que se encargará de hacer que parpadee la fila, siendo necesario guardar dos atributos en la fila, uno con el color inicial y otro con el final, para poder alternarlos.

El código Javascript que varía respecto a la versión anterior lo remarcaré en negrita.

// Color final que se quiere mostrar
var Rfinal = 255;
var Gfinal = 0;
var Bfinal = 0;
// Incremento en el degradado
var inc = 10;
// Para evitar que se pulsen dos filas a la vez y pueda dar problemas
var concurrencia = "";

// Modifica la tabla para diferenciar las filas
function transformar(ok) {
  // Obtengo la tabla
  var tabla = document.getElementById("tabla");

  // Guardo los datos de la tabla y marco filas alternas
  for (var i=1; i
    if (i%2 == 0) {
      tabla.rows[i].className = "par";
    } else {
      // Se tiene que borrar para cuando se redibuja
      tabla.rows[i].className = "";
    }
    // La primera vez se llama a la función con ok=true
    // para crear los id y asignar el evento onclick
    if (ok) {
      var id = "TR"+Math.random();
      tabla.rows[i].id = id;
      // Se pone en la variable "concurrencia" el id
      // para que no se pueda ejecutar la función "borrarFila"
      // con otra fila
      tabla.rows[i].onclick = function() {concurrencia=id; borrarFila(this.id, 100);}
    }
  }
}

// Borra la fila: primero cambiar de color y luego borra la fila
function borrarFila(id, porc) {
  if (concurrencia != id) {
    var obj = document.getElementById(id);
    // Obtengo el color de fondo
    var estilo = obj.tagName + (obj.className == ""? "":"."+obj.className);

    // Si el objeto no tiene color de fondo
    // lo buscamos dentro de los estilos
    // y si no se le asigna el blanco
    if (obj.style.backgroundColor == "") {
      var estilos = document.styleSheets;
      for (var i=0; i
        var rules = (estilos[i].cssRules)?estilos[i].cssRules:estilos[i].rules;
        for (j=0; j
          if (rules[j].selectorText.toLowerCase() == estilo.toLowerCase()) {
            obj.style.backgroundColor = rules[j].style.backgroundColor;
          }
        }
      }
      if (obj.style.backgroundColor == "") {
        obj.style.backgroundColor = "#FFFFFF";
      }
    }
    if (obj.style.backgroundColor.charAt(0) == "#") {
      obj.style.backgroundColor = cambiaEstiloHex2Dec(obj.style.backgroundColor);
    }

    // Añadimos los colores para el parpadeo
    if (!obj.getAttribute("color1")) {
      obj.setAttribute("color1", obj.style.backgroundColor);
    }
    if (!obj.getAttribute("color2")) {
      obj.setAttribute("color2", "rgb("+Rfinal+","+Gfinal+","+Bfinal+")");
    }

    // Si se está efectuando el degradado de colores
    if (porc >= 0) {
      // Se calcula el nuevo color, se trata de
      // el incremento o decremento de color
      // del color inicial (o actual) hacia el final
      var colores = obj.style.backgroundColor.match(/rgb((d{1,3})s*,s*(d{1,3})s*,s*(d{1,3}))/);
      var RGB = "rgb(";
      RGB += (porc==0? Rfinal:parseInt(parseInt(colores[1])-(colores[1]-Rfinal)/(porc/inc)))+",";
      RGB += (porc==0? Gfinal:parseInt(parseInt(colores[2])-(colores[2]-Gfinal)/(porc/inc)))+",";
      RGB += (porc==0? Bfinal:parseInt(parseInt(colores[3])-(colores[3]-Bfinal)/(porc/inc)))+")";
      obj.style.backgroundColor = RGB;
      // Seguimos con el degradado
      setTimeout(function() {borrarFila(id, porc-inc);}, 50);
    } else {
      // Se ha acabado con el degradado
      // Se libera el proceso
      concurrencia = "";
      // Se borra el registro en la BD
      parpadear(obj.id);
      borradoBD(obj);
    }
  }
}

// Cambiar un color del estilo #RRGGBB por uno del tipo rgb(r, g, b)
function cambiaEstiloHex2Dec(valor) {
  var colores = valor.match(/#([0-9A-F]{2})([0-9A-F]{2})([0-9A-F]{2})/i);
  return "rgb("+hex2dec(colores[1])+","+hex2dec(colores[2])+","+hex2dec(colores[3])+")";
}

// Transforma un numero hexadecimal de dos
// en uno decimal
function hex2dec(num) {
  var _hex = new Array();
  _hex["0"]=0; _hex["1"]=1; _hex["2"]=2; _hex["3"]=3;
  _hex["4"]=4; _hex["5"]=5; _hex["6"]=6; _hex["7"]=7;
  _hex["8"]=8; _hex["9"]=9; _hex["A"]=10; _hex["B"]=11;
  _hex["C"]=12; _hex["D"]=13; _hex["E"]=14; _hex["F"]=15; 

  if (num.match(/([0-9A-F]){2}/i)) {
    return _hex[(num.charAt(0)+"").toUpperCase()]+_hex[(num.charAt(1)+"").toUpperCase()]*16;
  }

  return 0;
}

function parpadear(id) {
  var obj = document.getElementById(id);
  if (obj) {
    // Cambio el color actual de fondo por el otro
    if (obj.getAttribute("color1") == obj.style.backgroundColor) {
      obj.style.backgroundColor = obj.getAttribute("color2");
    } else {
      obj.style.backgroundColor = obj.getAttribute("color1");
    }
    // Sigo cambiando el color
    var timeout = setTimeout("parpadear('"+id+"')", 200);
  }
}

// Creación del objeto AJAX
function ajaxobj() {
  try {
    _ajaxobj = new ActiveXObject("Msxml2.XMLHTTP");
  } catch (e) {
    try {
      _ajaxobj = new ActiveXObject("Microsoft.XMLHTTP");
    } catch (E) {
      _ajaxobj = false;
    }
  }

  if (!_ajaxobj && typeof XMLHttpRequest!='undefined') {
    _ajaxobj = new XMLHttpRequest();
  }

  return _ajaxobj;
}

// Llama mediante AJAX al borrado de la fila
function borradoBD (obj) {
  ajax = ajaxobj();
  ajax.open("GET", "borradoBD.php", true);
  ajax.onreadystatechange=function() {
    if (ajax.readyState==4) {
      obj.parentNode.removeChild(obj);
      // Se redibujan las filas alternas
      transformar();
      alert(ajax.responseText);
    }
  }
  ajax.send(null);
}

Código ejemplo

Relacionados

Comparte !
  • Digg
  • Sphinn
  • del.icio.us
  • Facebook
  • Mixx
  • Google Bookmarks
  • BarraPunto
  • BlinkList
  • email
  • laaik.it
  • Live
  • Meneame
  • MisterWong
  • MyShare
  • Pownce
  • Slashdot
  • StumbleUpon
  • TwitThis
  • Blogosphere News
  • De.lirio.us
  • Technorati

Unique visitors to post: 435

Categories: Ajax, OpenSource, bd, borrar, tabla Tags:
  1. Sin comentarios aún.
  1. Sin trackbacks aún.