前端发展很快,现代浏览器原生 API 已经足够好用。我们并不需要为了操作 DOM、Event 等再学习一下 jQuery 的 API。同时由于 React、Angular、Vue 等框架的流行,直接操作 DOM 不再是好的模式,jQuery 使用场景大大减少。本项目总结了大部分 jQuery API 替代的方法,暂时只支持 IE10 以上浏览器。
选择器查询
// jQuery
$('.class');
$('#id');
$('a[target=_blank]');
$el.find('li');
$el.prev();
$el.next();
// Native
document.querySelectorAll('.class');
document.querySelector('#id');
document.querySelectorAll('a[target=_blank]');
el.querySelectorAll('li');
el.previousElementSibling;
el.nextElementSibling;
表单
// jQuery
$('#my-input').val();
$('.radio').index(e.currentTarget);
// Native
document.querySelector('#my-input').value;
Array.prototype.indexOf.call(document.querySelectorAll('.radio'), e.currentTarget);
获取或设置属性
// jQuery
$el.attr('foo');
$el.attr('foo', 'bar');
$el.data('foo');
// Native
el.getAttribute('foo');
el.setAttribute('foo', 'bar');
el.dataset['foo'];
CSS & Style
// jQuery
$el.css("color");
// Native
window.getComputedStyle(el).color;
// jQuery
$el.css({ color: "#FFF" });
// Native
el.style.color = '#FFF';
// jQuery
$el.addClass(className);
// Native
el.classList.add(className);
// jQuery
$el.removeClass(className);
// Native
el.classList.remove(className);
// jQuery
$el.hasClass(className);
// Native
el.classList.contains(className);
// jQuery
$el.toggleClass(className);
// Native
el.classList.toggle(className);
DOM 操作
// jQuery
$el.remove();
// Native
el.parentNode.removeChild(el);
// jQuery
$el.text();
// Native
el.textContent;
// jQuery
$el.text(string);
// Native
el.textContent = string;
// jQuery
$el.html();
// Native
el.innerHTML;
// jQuery
$el.html(htmlString);
// Native
el.innerHTML = htmlString;
// jQuery
$el.append($newEl);
// Native
el.appendChild(newEl);
// jQuery
$el.prepend($newEl);
// Native
el.insertBefore(newEl, el.firstChild);
Ajax
// jQuery
$(selector).load(url, completeCallback)
// Native
fetch(url).then(data => data.text()).then(data => {
document.querySelector(selector).innerHTML = data
}).then(completeCallback)
// jQuery
$.ajax({
url: url,
type: 'GET',
success: function(resp) {
// 处理响应
},
error: function() {
// 处理错误
}
});
// Native
fetch(url)
.then(response => response.json())
.then(data => {
// 处理响应
})
.catch(error => {
// 处理错误
});
事件
// jQuery
$(document).ready(eventHandler);
// Native
// 检测 DOMContentLoaded 是否已完成
if (document.readyState !== 'loading') {
eventHandler();
} else {
document.addEventListener('DOMContentLoaded', eventHandler);
}
// jQuery
$el.on(eventName, eventHandler);
// Native
el.addEventListener(eventName, eventHandler);
// jQuery
$el.off(eventName, eventHandler);
// Native
el.removeEventListener(eventName, eventHandler);
// jQuery
$(el).trigger('custom-event', {key1: 'data'});
// Native
if (window.CustomEvent) {
const event = new CustomEvent('custom-event', {detail: {key1: 'data'}});
} else {
const event = document.createEvent('CustomEvent');
event.initCustomEvent('custom-event', true, true, {key1: 'data'});
}
el.dispatchEvent(event);
动画
// jQuery
$el.show();
$el.hide();
// Native
el.style.display = ''|'inline'|'inline-block'|'inline-table'|'block';
el.style.display = 'none';
// jQuery
$el.fadeIn();
// Native
el.style.transition = 'opacity 0.5s';
el.style.opacity = '1';
// jQuery
$el.fadeOut();
// Native
el.style.transition = 'opacity 0.5s';
el.style.opacity = '0';
// jQuery
$el.slideUp();
$el.slideDown();
// Native
// 这些效果可以通过 CSS transitions 和 JavaScript 来实现
// 例如:
el.style.transition = 'max-height 0.5s ease-out';
el.style.overflow = 'hidden';
el.style.maxHeight = '0'; // slideUp
el.style.maxHeight = el.scrollHeight + 'px'; // slideDown