Los términos Vanilla JS y JavaScript nativo (o puro) se usan como sinónimos en la comunidad de desarrollo web para referirse a escribir código en JavaScript usando únicamente lo que ofrece el propio lenguaje, sin depender de librerías ni de frameworks externos (como jQuery, React, Vue o Angular).
Esta terminología se debe a los siguientes motivos principales:
Con la evolución de las versiones modernas de JavaScript (ES6+), los navegadores han estandarizado sus funciones. Hoy en día, usar JavaScript nativo permite realizar manipulaciones del DOM, peticiones asíncronas (fetch) o filtrado y ordenación de datos con un rendimiento más elevado y un código mucho más ligero al prescindir de librerías intermedias.
Una selección de nodos eficiente es la base de cualquier interacción en el frontend. Mientras que jQuery usa el motor Sizzle para resolver selectores, los navegadores modernos implementan estos métodos directamente en el núcleo de C++, lo que ofrece una velocidad de ejecución significativamente mayor.
Aquí tienes la tabla comparativa con las equivalencias más comunes entre jQuery y JavaScript Nativo (Vanilla JS) con la sintaxis moderna (ES6+):
| Tarea | jQuery | JavaScript |
|---|---|---|
| Seleccionar por ID | $('#mi-id') | document.getElementById('mi-id') |
| Seleccionar por CLASE (primer elemento) | $('.mi-clase') | document.querySelector('.mi-clase') |
| Seleccionar múltiples elementos | $('.mi-clase') | document.querySelectorAll('.mi-clase') |
| Esperar a que el DOM cargue | $(document).ready(function() { ... }); | document.addEventListener('DOMContentLoaded', () => { ... }); |
| Escuchar un evento (Clic) | $('#mi-id').on('click', function() { ... }); | document.getElementById('mi-id').addEventListener('click', () => { ... }); |
| Obtener / Modificar texto (ignora HTML) | $('#mi-id').text('Nuevo texto') | document.getElementById('mi-id').textContent = 'Nuevo texto' |
| Obtener / Modificar HTML | $('#mi-id').html('Texto') | document.getElementById('mi-id').innerHTML = 'Texto' |
| Obtener / Modificar valor (Input,texarea y select) | $('#mi-id').val() | document.getElementById('mi-id').value |
| Añadir clase CSS | $('#mi-id').addClass('activa') | document.getElementById('mi-id').classList.add('activa') |
| Remover clase CSS | $('#mi-id').removeClass('activa') | document.getElementById('mi-id').classList.remove('activa') |
| Alternar (toggle) clase CSS | $('#mi-id').toggleClass('activa') | document.getElementById('mi-id').classList.toggle('activa') |
| Ocultar / Mostrar elemento | $('#mi-id').hide() / $('#mi-id').show() | mi-id.style.display = 'none' / mi-id.style.display = '' |
| Petición asíncrona (AJAX / Fetch) | $.ajax({ url: 'api.php', ... }) | fetch('api.php').then(res => res.json()).then(data => ...) |
| Crear y agregar elemento al DOM | $('#mi-id').append('<div>Nuevo</div>') | let div = document.createElement('div');
div.textContent = 'Nuevo'; document.getElementById('mi-id').appendChild(div); |
| Como ejecutar funciones desde botones | $(document).on('click','#mi-id',function() { ... }); | <button onclick='Busqueda()'>Limpiar</button> |
💡 Como puedes ver, las APIs modernas de los navegadores (querySelector, classList, fetch) permiten lograr exactamente lo mismo con un nivel de legibilidad y rendimiento muy similar al de jQuery, pero sin cargar librerías externas.