logotipo
LUNES

07

Mar...

Última modificación 2018-05-29T12:10:09-05:00

10 Tips para cambiar Jquery por JavaScript puro

10 Tips para cambiar Jquery por JavaScript puro

Jquery es una de las librerías más usadas por los desarrolladores web en la actualidad, pero para nadie es un secreto que es lenta y añade bytes adicionales a la carga de nuestro sitio por la que muchos dicen que es totalmente innecesario su uso.

Muchas veces Jquery es mal utilizado solo para asignar un evento a unos botones o colocar alguna animación a algún elemento, cosas que podemos hacer con simple JavaScript sin escribir mucho más código y sin necesidad de importar librerías.

 

Document ready


Este es un evento muy usado en Jquery que indica cuando el DOM esta listo para ser manipulado pero esto podemos hacerlo muy fácil con JavaScript.

document.addEventListener('DOMContentLoaded', function () {
    console.log('Aloha');
});
 

Seleccionar elementos


Los selectores en Jquery son practicante el 70% de las razones por la que usamos la librería, sin embargo JavaScript tiene un api que nos permite seleccionar elementos de la misma forma que Jquery mediante clases, id o nombre de los tag.

//Devuelve el primer elemento que coincida con el selector
var lochNess = document.querySelector(".monsters");
 
//Devuelve todos los elementos que coincidan con el selector
var scary = document.querySelectorAll(".monsters");

 

Seleccionar atributos, get, add, has, remove

GET

var x = document.getElementById("myAnchor").getAttribute("target");

result _blank

HAS

var x = document.getElementById("myBtn").hasAttribute("onclick");

REMOVE

document.getElementById("myAnchor").removeAttribute("href");

SET

element.setAttribute("style", "background-color: red;");

 

Append

            var divBtnsNw = document.createElement("div");
            divBtnsNw.id = "divBtnsNw";
            divBtnsNw.innerHTML = htmlOb;
            document.querySelector("body").appendChild(divBtnsNw);

After - Before

 var x = document.querySelector("textarea");

var div = document.createElement("div");
div.id = "test";
div.innerHTML = t;

//before

x.parentNode.insertBefore(div, x.firsChild);

//after

x.parentNode.insertBefore(div, x.nextSibling);

 

Par Impar

  if (n % 2 === 1) {
            //impar
        }

 

Añadir y eliminar eventos


Los eventos con JavaScript son muy fáciles de añadir incluso necesitan la misma cantidad de código que con Jquery y no tenemos que importar librerias.

var btn = document.querySelector("button");
 
var button_click = function () {
    console.log("click");
};
 
btn.addEventListener("click", button_click);
btn.removeEventListener("click", button_click);
 

Manipular clases y atributos


Otra cosa que podemos hacer con solo JavaScript es manipular las clases y atributos css de los elementos en el DOM.

var div = document.querySelector("#myDiv");
 
console.log(div.id);
 
var classes = div.classList;
classes.add("red");
classes.toggle("hidden");
 

Get y Set del contenido de los elementos


Podemos modificar el contenidos de los elementos en el DOM fácilmente sin mucho código y claro sin Jquery.

var myText = document.querySelector("#myParagraph");
 
var myContent = myText.textContent;
console.log("textContent: " + myContent);
myText.textContent = "Nuevo contenido";
 
var myHtml = myText.innerHTML;
console.log("innerHTML: " + myHtml);
myText.innerHTML = "<button> Nuevo HTML </button>";
 

Insertar y remover elementos


La función append de Jquery es genial te permite insertar elementos dentro de otros, pero podemos hacerlo con JavaScript igual de fácil.

var lunch = document.querySelector("#lunch");
 
var fries = document.createElement("div");
 
fries.innerHTML = '<li><h4> Fries </h4></li>';
 
lunch.appendChild(fries);
 
var pickles = document.querySelector("#pickles");
pickles.parentNode.removeChild(pickles);
 
var beef = document.querySelector("#Beef"),
topSlice = document.createElement("li"),
bottomSlice = document.createElement("li");
 
// De esta forma podemos insertar antes del elemento.
beef.parentNode.insertBefore(topSlice, beef);
 
// Con un pequeño truco insertar entre el elemento y el que le sigue.
beef.parentNode.insertBefore(bottomSlice, beef.nextSibling);
 

Navegando en el arbol del DOM


Moverse entre los elementos del DOM es muy útil y el api de JavaScript provee métodos muy útiles para hacerlo.

var snakes = document.querySelector('#snakes');
 
var parent = snakes.parentNode;
var children = snakes.children;
var previous = snakes.previousElementSibling;
var next = snakes.nextElementSibling;
 

Funciones para recorrer arreglos


JavaScript también tiene métodos para recorrer arreglos y manipularlos sin usar librerías externas.

var ninjaTurtles = ["Donatello", "Leonardo", "Michelangelo", "Raphael"];
 
ninjaTurtles.forEach(function (entry) {
    console.log(entry);
});
 
 
var lovesPizza = ninjaTurtles.map(function (entry) {
    return entry.concat(" loves pizza!");
});
 

Animaciones


En este caso si es complicado ganarle al motor de animaciones de Jquery ya que JavaScript no tiene métodos que lo hagan sin embargo gracias a CSS3 podemos usar librerías como AnimateCSS para hacer excelentes animaciones sin Jquery.

var circle = document.querySelector("#circle");
 
circle.classList.add('animated');
 
// Podemos colocar la animación deseada en el atributo data-animation
var animation = circle.getAttribute('data-animation');
 
circle.classList.add(animation);
 
window.setTimeout(function () {
    circle.classList.remove(animation);
}, 1000);
 

Ajax


Esta es la parte que todos detestan y por eso usan Jquery, pero la verdad las llamadas Ajax no son tan complicadas en JavaScript.

var request = new XMLHttpRequest();
 
request.open('GET', 'http://tutorialzine.com/misc/files/my_url.html', true);
 
request.onload = function (e) {
    if (request.readyState === 4) {
        // Check if the get was successful.
        
        if (request.status === 200) {
            console.log(request.responseText);
        } else {
            console.error(request.statusText);
        }
    }
};
 
request.onerror = function (e) {
    console.error(request.statusText);
};
 
request.send(null);
 

La idea de esto no es pedirles que dejen de usar Jquery, sin embargo es bueno saber lo que podemos hacer sin necesidad de usar esta librería.

 

Ejemplo de uso de las anteriores funciones en JavaScript Puro:

<script>
document.addEventListener("DOMContentLoaded", function(e) {
console.log(e);
createAll();
});

function createAll() {
var container = document.querySelector(".container");
var div = document.createElement("div");
div.classList.add("container");

for(var i = 0; i < 10; i++) {
var html = "<div class='containLinks'>";
html += "<div class='test test_" + i + "' data='" + i + "' ><strong>Link " + i + "</strong> || </div>";
html += "<span class='accion' dataType='open' dataId='" + i + "' >Abrir</span> ";
html += "<span class='accion' dataType='changeName' dataId='" + i + "' >Change Name</span>";
html += "</div>";
div.innerHTML += html;
}

document.querySelector(".containerExample").appendChild(div);

var buttons = document.querySelectorAll(".accion");
for(var x = 0; x < buttons.length; x++) {
var button = buttons[x];
button.addEventListener("click", function() {
var type = this.getAttribute("dataType");
var id = this.getAttribute("dataId");
var classUsed =  ".test_" + id;
if(type == "changeName") {
changeName(classUsed);
}
else
if(type == "open") {
openDiv(classUsed);
}


var removerClase = document.querySelectorAll(".test");
for(var y = 0; y < removerClase.length; y++) {
removerClase[y].classList.remove("classNew");
}

document.querySelector(".test_" + id).classList.add("classNew");
});
}

}

function openDiv(object) {
var divMain = document.querySelector(object);
var divRemove = document.querySelector(".divList");
if(divRemove != null) 
 divRemove.remove();

var html = "<h1>perfect strong</h1>";
var element = document.createElement("div");
element.classList.add("divList");
element.innerHTML = html;
divMain.appendChild(element);
}

function changeName(object) {
var divMain = document.querySelector(object);
divMain.innerHTML = "New text";
}
</script>

<style>
.classNew {
color: red;
}
.divList {
border: 1px solid #000;
}
</style>
<div class="containerExample"></div>

 

 

Código ejecutado