Código HTML:
//Elimina los nodo de texto vacios function limpiarNodos(nodoPadre) { for (var i = 0; i < nodoPadre.childNodes.length; i++) { var node = nodoPadre.childNodes[i]; // \S cualquier caracter individual que no se un espacio en blanco if (node.nodeType == 3 && !/\S/.test(node.nodeValue)) node.parentNode.removeChild(node); } } /* Verifica si hay algun div de la paleta de colores ya pulsado (con la clase seleccionado) y eliminar el anterior seleccionado */ function verificarColorSeleccionado() { var nodosColores = document.getElementById('colores').childNodes; limpiarNodos(document.getElementById('colores')); for (var i = 0; i < nodosColores.length; i++) { var listaClases = nodosColores[i].classList; for (var j = 0; j < listaClases.length; j++) { if (listaClases[j] == 'seleccionado') { nodosColores[i].classList.remove('seleccionado'); } } } } //Comprobar si existe un color seleccionado function comprobarColorSeleccionado() { var nodosColores = document.getElementById('colores').childNodes; limpiarNodos(document.getElementById('colores')); for (var i = 0; i < nodosColores.length; i++) { var listaClases = nodosColores[i].classList; for (var j = 0; j < listaClases.length; j++) { if (listaClases[j] == 'seleccionado') { return true; } } } return false; } // Añadir la clase seleccionado al color pulsado function cambiarSeleccionado(div) { verificarColorSeleccionado(); //Añadir una clase al elemento document.getElementById(div.id).className += " seleccionado"; } //Obtenemos el color de la paleta seleccionado mediante el id del color del css function colorSeleccionadoPaleta() { var nodosColores = document.getElementById('colores').childNodes; limpiarNodos(document.getElementById('colores')); //recorremos toda la paleta de colores for (var i = 0; i < nodosColores.length; i++) { var listaClases = nodosColores[i].classList; for (var j = 0; j < listaClases.length; j++) { if (listaClases[j] == 'seleccionado') { //Obtienes las distintas reglas de la hoja 0 (en este caso solo tenemos una por eso ponemos 0) //sino recorreriamos todas la css con un for var estilos = document.styleSheets[0].cssRules; for (var k = 0; k < estilos.length; k++) { //comparamos con "selectorText" el nombre de la regla con el nombre del id del color seleccionado if (estilos[k].selectorText == '#' + nodosColores[i].id) { //obtenemos el background de la hoja color = estilos[k].style.backgroundColor; } } } } } return color; } //Verificar si el lapiz está activo function verificarLapiz(td) { // verificar si existe color en el lapiz y si esta un color de la paleta seleccionado if (document.getElementById('colorSeleccionado').style.backgroundColor === '' && comprobarColorSeleccionado() === true) { var colorObtenido = colorSeleccionadoPaleta(); document.getElementById('colorSeleccionado').style.backgroundColor = colorObtenido; td.style.backgroundColor = colorObtenido; anadirEventos(); } if (comprobarColorSeleccionado() !== false) { document.getElementById('colorSeleccionado').style.backgroundColor = ''; verificarColorSeleccionado(); } if(document.getElementById('colorSeleccionado').style.backgroundColor ==='') { eliminarEventos(); } } function pintar(td) { var colorObtenido = colorSeleccionadoPaleta(); td.style.backgroundColor = colorObtenido; } function ev(x, y, z) { if (document.addEventListener) { x.addEventListener(y, z, false); } else { x.attachEvent('on' + y, z); } } function evEliminar(x, y, z) { if (document.removeEventListener) { document.removeEventListener(y, z, false); x.removeEventListener(y, z, false); } else if(x.detachEvent) { // For IE 8 and earlier versions document.detachEvent('on' + y, z); x.detachEvent('on' + y, z); } } function anadirEventos() { var tds = document.getElementById('tablero').getElementsByTagName('td'); for (var i = 0; i < tds.length; i++) { ev(tds[i],'mouseover',function(){pintar(this);}); } } function eliminarEventos() { var tds = document.getElementById('tablero').getElementsByTagName('td'); for (var i = 0; i < tds.length; i++) { evEliminar(tds[i],'mouseover',function(){pintar(this);}); } }