LightQuery - 10 times smaller than jQuery (90kB => 9kB)
This is a complete rewrite of the well-known jQuery library.
Every method has been rewritten or replaced by another method.
Installation
Simply import light-query.min.js
into your HTML by downloading it or using a CDN.
<script src="https://gitcdn.link/repo/Zenoo/LightQuery/master/light-query.min.js"></script>
Usage
- Initialize your object like you would in jQuery using
$
:
$(selector[, context])
// Example
let elements = $('yo.ur[selec="tor"]');
let elementsWithContext = $('yo.ur[selec="tor"]', section);
- If you need to wait for the document to be loaded, use:
$(() => {
// The document is loaded here
});
// OR
$(function(){
// The document is loaded here
});
- The
LightQuery
object extends the native Array
object, so you can use all of its methods/properties.
// Examples
$('p').length;
$('p')[0];
$('p').map(...);
Methods
The full API documentation is available on [https://zenoo.github.io/LightQuery/docs/-$](https://zenoo.github.io/LightQuery/docs/-$.html).
Methods not included
.addBack() Use more appropriate selectors instead |
.ajaxComplete() Use $.ajax() instead |
.ajaxError() Use $.ajax() instead |
.ajaxSend() Use $.ajax() instead |
.ajaxStart() Use $.ajax() instead |
.ajaxStop() Use $.ajax() instead |
.ajaxSuccess() Use $.ajax() instead |
.andSelf() Use more appropriate selectors instead |
.animate() Use CSS3 animations instead |
.change() Use .on(‘change’) or .trigger(‘change’) instead |
.clearQueue() There is no queue |
.click() Use .on(‘click’) or .trigger(‘click’) instead |
.data() Use .attr(‘data-…’) instead |
.dblclick() Use .on(‘dblclick’) or .trigger(‘dblclick’) instead |
.delay() Use setTimeout() or CSS3 animations instead |
.delegate() Use .on() instead |
.dequeue() There is no queue |
.die() Use .off() instead |
.end() Use another query instead |
.error() Use .on(‘error’) instead |
.fadeIn() Use classes and CSS transitions instead |
.fadeOut() Use classes and CSS transitions instead |
.fadeTo() Use classes and CSS transitions instead |
.fadeToggle() Use classes and CSS transitions instead |
.finish() Use CSS3 animations instead |
.focus() Use .on(‘focus’) or .trigger(‘focus’) instead |
.focusin() Use .on(‘focusin’) instead |
.focusout() Use .on(‘focusout’) instead |
.hover() Use .on(‘mouseenter’) and .on(‘mouseleave’) instead |
.innerHeight() Use .height() instead |
.innerWidth() Use .width() instead |
$.each() Use for … of or .forEach() instead |
$.extend() Use Object.assign() instead |
$.fn.extend() Use _$.prototype.XXX instead |
$.getJSON() Use $.ajax() instead |
$.getScript() Use $.ajax() instead |
$.globalEval() Use proper coding instead |
$.post() Use $.ajax() instead |
.queue() There is no queue |
.keydown() Use .on(‘keydown’) or .trigger(‘keydown’) instead |
.keypress() Use .on(‘keypress’) or .trigger(‘keypress’) instead |
.keyup() Use .on(‘keyup’) or .trigger(‘keyup’) instead |
.live() Use .on() instead |
.load() Use $.ajax() and .html() instead |
.mousedown() Use .on(‘mousedown’) or .trigger(‘mousedown’) instead |
.mouseenter() Use .on(‘mouseenter’) or .trigger(‘mouseenter’) instead |
.mouseleave() Use .on(‘mouseleave’) or .trigger(‘mouseleave’) instead |
.mousemove() Use .on(‘mousemove’) or .trigger(‘mousemove’) instead |
.mouseout() Use .on(‘mouseout’) or .trigger(‘mouseout’) instead |
.mouseover() Use .on(‘mouseover’) or .trigger(‘mouseover’) instead |
.mouseup() Use .on(‘mouseup’) or .trigger(‘mouseup’) instead |
.nextUntil() Use better queries instead |
.offsetParent() Why would you ever need this |
.one() Use .on() and .off() instead |
.outerHeight() Use .height() and .css() instead |
.outerWidth() Use .width() and .css() instead |
.parentsUntil() Use .parents() and .not() instead |
.prevUntil() Use better queries instead |
.promise() There is no queue |
.prop() Use .attr() instead |
.pushStack() There is no stack |
.queue() There is no queue |
.ready() Use $(function(){ … }) or $(() => { … }) instead |
.removeData() Use .removeAttr() instead |
.removeProp() Use .removeAttr() instead |
.resize() Use .on(‘resize’) or .trigger(‘resize’) instead |
.scroll() Use .on(‘scroll’) or .trigger(‘scroll’) instead |
.select() Use .on(‘select’) or .trigger(‘select’) instead |
.size() Use .length instead |
.slideDown() Use classes and CSS transitions instead |
.slideToggle() Use classes and CSS transitions instead |
.slideUp() Use classes and CSS transitions instead |
.stop() Use CSS3 animations instead |
.submit() Use .on(‘submit’) or .trigger(‘submit’) instead |
.toArray() Use .get() instead |
.triggerHandler() Use .trigger() instead |
.unbind() Use .off() instead |
.undelegate() Use .off() instead |
.unload() Use .on(‘unload’) instead |
.wrapInner() Use .children().wrapAll() instead |
In-depth method definition
.add(selector[, context]) Add elements to the current LightQuery object |
selector {Element|NodeList|Array|String|_$} Element(s) to add |
context {Element} Context of the potential query |
Returns{_$} The current LightQuery object |
// Examples
$('p').add('aside');
$('p').add('<div>Example</div>');
$('p').add(document.body);
.addClass(classes) Add class(es) to each element |
classes {String} Space separated classes to add |
Returns{_$} The current LightQuery object |
// Examples
$('p').addClass('selected');
$('p').addClass('selected blue bg');
.after(…content) Insert content after each element |
elements {Element[]|NodeList[]|Array[]|String[]|_$[]} Content to be inserted |
Returns{_$} The current LightQuery object |
// Examples
$('p').after('div');
$('p').after('<aside>See more</aside>');
.append(…content) Append content to the end of each element |
content {Element[]|NodeList[]|Array[]|String[]|_$[]} Content to be appended |
Returns{_$} The current LightQuery object |
// Examples
$('div').append('p');
$('div').append('<aside>See more</aside>');
.appendTo(targets) Append each element to the end of the targets |
elements {Element|NodeList|Array|String|_$} Content to be appended |
Returns{_$} The current LightQuery object |
// Examples
$('p').appendTo('div');
$('<aside>See more</aside>').appendTo('p');
.attr(name[, value]) Set/Get an attribute for each element |
name {String} The attribute name |
value {String|Number|null} The attribute value |
Returns{_$\|String} The current LightQuery object or the value of the attribute |
// Examples
let title = $('p').attr('title');
$('p').attr('title', 'New title');
.before(…content) Insert content before each element |
content {Element[]|\NodeList[]|Array[]|String[]|_$[]} Content to be inserted |
Returns{_$} The current LightQuery object |
// Examples
$('p').before('div');
$('p').before('<aside>See more</aside>');
.blur() Force the focus out of each element |
Returns{_$} The current LightQuery object |
// Example
$('p').blur();
.children([selector]) Get the children of each element |
selector {String} An optional filter |
Returns{_$} The current LightQuery object’s children |
// Examples
$('p').children();
$('p').children('span');
.clone([deep]) Clone each element |
deep {Boolean} Deep clone the elements ? Default: true |
Returns{_$} A clone of the previous LightQuery object |
// Examples
let clone = $('p').clone();
let shallowClone = $('p').clone(false);
.closest(selector) Get the closest (self-included) parent matching the selector for each element |
selector {String} The selector |
Returns{_$} A new LightQuery object |
// Example
$('p').closest('aside');
.contents() Get the children of each element (including text nodes) |
Returns{_$} A LightQuery object containing the child nodes |
// Example
$('p').contents();
.css(parameter[, value]) Set/Get one or more CSS properties |
parameter {String|Object} The CSS property name or an object containing every CSS properties to be changed |
value {String} The CSS property value |
Returns{_$} The current LightQuery object |
// Examples
$('p').css('color', 'red');
$('p').css('color');
$('p').css({
color: 'blue',
opacity: .5
});
.detach() Remove each element from the DOM, to be reused later |
Returns{_$} The current LightQuery object |
// Example
const forLaterUse = $('p').detach();
.each(callback) Iterate over each element Inside this method, this corresponds to the current element |
callback {Function} The callback function |
Returns{_$} The current LightQuery object |
// Example
$('p').each(function(){
$(this).whatever(); // ...
});
.empty() Remove all child nodes of each element |
Returns{_$} The current LightQuery object |
// Example
$('p').empty();
.eq(index) Get the Nth element (a negative N starts counting from the end) |
index {Number} The element index (zero-based) |
Returns{_$} The Nth element’s LightQuery object |
.filter(parameter) Filter elements from a selector or a function returning a Boolean |
parameter {String|Function} A selector or a filtering function |
Returns{_$} The filtered LightQuery object |
// Examples
$('p').filter('.red');
$('p').filter(function(){
return $(this).hasClass('red');
});
$('p').filter(element => $(element).hasClass('red'));
.find(selector) Find the descendants of each element corresponding to the selector |
selector {String} The selector |
Returns{_$} The corresponding descendants’ LightQuery object |
// Example
$('p').find('span');
.first() Get the first element |
Returns{_$} The first element’s LightQuery object |
// Example
$('p').first();
.get([index]) Get one or every element |
index {Number} The element index (null to get every element) |
Returns{Element\|Element\[\]} The requested element(s) |
// Examples
$('p').get();
$('p').get(0);
.has(parameter) Reduce the elements based on a descendant selector or descendant element |
parameter {String|Element} The selector or element to reduce with |
Returns{_$} The corresponding elements’ LightQuery object |
// Examples
$('p').has('span');
$('p').has(specificSpan);
.hasClass(className) Determine if at least one element contains the given class |
className {String} The class name |
Returns{Boolean} True if an element contains the class, False otherwise |
// Example
$('p').hasClass('red');
.height() Get the computed height of the first element |
Returns{Number} The computed height of the first element (px) |
// Example
const height = $('p').height();
.hide() Hide each element |
Returns{_$} The current LightQuery object |
// Example
$('p').hide();
.html([html]) Get the HTML of the first element or Set each element’s HTML |
html {String} The HTML to set |
Returns{_$} The current LightQuery object |
// Examples
const html = $('p').html();
$('p').html(`
<span>This</span>
is
<em>an example.</em>
`);
.index() Get the first element’s index in relation to its siblings |
Returns{Number} The index |
// Example
const elementIndex = $('p').index();
.insertAfter(target) Insert each element after the target(s) |
target {Element|NodeList|Array|String|_$} The target(s) |
Returns{_$} The current LightQuery object |
// Examples
$('p').insertAfter('aside');
$('p').insertAfter(section);
.insertBefore(target) Insert each element before the target(s) |
target {Element|NodeList|Array|String|_$} The target(s) |
Returns{_$} The current LightQuery object |
// Examples
$('p').insertBefore('aside');
$('p').insertBefore(section);
.is(target) Check if at least one of the elements matches the target |
target {String|Function|Element|_$} The target or Function to match against |
Returns{Boolean} True if at least one of the elements matches the target, False otherwise |
// Examples
$('p').is('.red');
$('p').is(function(){
return $(this).hasClass('red');
});
$('p').is(p => $(p).hasClass('red'));
$.ajax(parameter[, settings]) Send an AJAX request |
parameter {String|Object} URL of the request or settings object |
settings {Object} Settings object |
settings.data {Object|FormData} Request data |
settings.dataType {String} Response data type Default: json |
settings.error {Function} Callback for the error event |
settings.headers {Object.<String, String>} Request headers |
settings.method {String} Request headers Default: GET |
settings.success {Function} Callback for the success event |
settings.url {String} Request URL |
Returns{XMLHttpRequest} The XMLHttpRequest |
// Examples
$.ajax('https://whatev.er', {
data: {
example: 1,
test: 'Example'
},
dataType: 'text',
headers: {
'Content-Type': 'application/json'
},
method: 'POST',
success: response => {
console.log(response);
},
error: response => {
console.log(response);
}
});
$.ajax({
url: 'https://whatev.er',
...
});
$.get(url[, data, success, dataType]) Shorthand for sending a GET AJAX request |
url {String} URL of the request or settings object |
data {Object} Request data |
success {Function} Callback for the success event |
dataType {String} Response data type |
Returns{XMLHttpRequest} The XMLHttpRequest |
// Example
$.get('https://whatev.er', {
example: 1,
test: 'Example'
}, response => {
console.log(response);
}, 'text');
$.insert(toInsert, position, relativeElements) Shorthand to insert element(s) relative to other(s) |
toInsert {Element|NodeList|Array|String|_$} The element(s) to insert |
position {String} The position of the new element(s) Possible values: before|start|end|after |
relativeElements {Element|NodeList|Array|String|_$} The element(s) to position from |
Returns{_$} A new LightQuery object containing the inserted nodes |
// Examples
$.insert('p', 'before', 'aside');
$.insert(element, 'start', 'aside');
$.insert('p', 'end', elements);
$.insert('p', 'after', 'aside');
.last() Get the last element |
Returns{_$} The last element’s LightQuery object |
// Example
$('p').last();
.next([selector]) Get next immediate sibling. If a selector is provided, doesn’t return the sibling if it doesn’t match |
selector {String} The sibling selector |
Returns{_$} The next immediate sibling’s LightQuery object |
// Examples
$('p').next();
$('p').next('.red');
.nextAll([selector]) Get next siblings. If a selector is provided, doesn’t return the siblings if they don’t match |
selector {String} The sibling selector |
Returns{_$} The next siblings’ LightQuery object |
// Examples
$('p').nextAll();
$('p').nextAll('.red');
.not(target) Remove elements matching the target from the current LightQuery object |
target {Element|NodeList|Array|String|Function|_$} The target or a Function returning a Boolean |
Returns{_$} LightQuery Object containing the elements not matching the target |
// Examples
$('p').not('.blue');
$('p').not(function(){
return !$(this).hasClass('blue');
});
$('p').not(p => !$(p).hasClass('blue'));
.off(events[, selector, handler]) Remove an event handler |
events {String} The events to stop listening to |
selector {String} The selector matching the one used with .on() |
handler {Function} The handler used with .on() |
Returns{_$} The current LightQuery object |
// Examples
$('p').off('click');
$('p').off('click dblclick');
$('p').off('click', 'span');
$('p').off('click', 'span', e => {
...
});
.offset() Get the coordinates of the first element |
Returns{DOMRect} Object containing the coordinates of the first element. Use .left, .top |
// Examples
const left = $('p').offset().left;
const top = $('p').offset().top;
const {
left: leftOffset,
top: topOffset
} = $('p').offset();
.on(events[, selector], handler[, data]) Add an event handler |
events {String} The events to start listening to |
selector {String} The selector used for event delegation |
handler {Function} The handler for the event(s) |
data {Object} The data to be passed the the handler |
Returns{_$} The current LightQuery object |
// Examples
$('p').on('click', function(){
console.log($(this));
});
$('p').on('click', 'span', function(){
console.log($(this));
});
.parent([selector]) Get the parent of each element. If a selector is passed, filter those parents |
selector {String} The parent selector |
Returns{_$} The parent(s)’ LightQuery object |
// Example
$('p').parent();
.parents([selector]) Get the ancestors of each element. If a selector is passed, filter those parents |
selector {String} The parents selector |
Returns{_$} The parent(s)’ LightQuery object |
// Example
$('p').parents();
.prepend(…elements) Prepend content to the end of each element |
elements {Element[]|NodeList[]|Array[]|String[]|_$[]} Elements to be prepended |
Returns{_$} The current LightQuery object |
// Examples
$('p').prepend('<em>Example</em>');
$('p').prepend('span.red');
.prependTo(targets) Prepend each element before the targets |
targets {Element|NodeList|Array|String|_$} Elements to be prepended to |
Returns{_$} The current LightQuery object |
// Examples
$('p').prependTo('div');
$('p').prependTo(section);
.prev([selector]) Get previous immediate sibling. If a selector is provided, doesn’t return the sibling if it doesn’t match |
selector {String} The sibling selector |
Returns{_$} The previous immediate sibling LightQuery object |
// Examples
$('p').prev();
$('p').prev('ul');
.prevAll([selector]) Get previous siblings. If a selector is provided, doesn’t return the siblings if they don’t match |
selector {String} The siblings selector |
Returns{_$} The previous siblings LightQuery object |
// Examples
$('p').prevAll();
$('p').prevAll('ul');
.remove() Remove each element from the DOM |
Returns{_$} The current LightQuery object |
// Example
$('p').remove();
.removeAttr(attribute) Remove an attribute from each element |
attribute {String} Attribute name |
Returns{_$} The current LightQuery object |
// Example
$('p').removeAttr('title');
.removeClass(classes) Remove class(es) from each element |
classes {String} Space separated classes to remove |
Returns{_$} The current LightQuery object |
// Examples
$('p').removeClass('red');
$('p').removeClass('blue flash');
.replaceAll(targets) Replace each target with each element |
targets {Element|NodeList|Array|String|_$} The targets |
Returns{_$} The current LightQuery object |
// Examples
$('p.new').replaceAll('p.old');
$('<p>New content</p>').replaceAll('p');
.replaceWith(newContent) Replace each element with the new content |
newContent {Element|NodeList|Array|String|_$} The new content |
Returns{_$} The current LightQuery object |
// Examples
$('p.old').replaceWith('p.new');
$('p').replaceWith('<p>New content</p>');
// Examples
$('p').scrollLeft();
$('p').scrollLeft(420);
// Examples
$('p').scrollTop();
$('p').scrollTop(420);
.serialize() Encode each form element as a string |
Returns{String} The serialized value of each element |
// Examples
$('form').serialize();
$('input').serialize();
.serializeArray() Encode each form element as an array of names and values |
Returns{Object[]} An array of names and values |
// Examples
$('form').serializeArray();
$('input').serializeArray();
.show() Show each element |
Returns{_$} The current LightQuery object |
// Example
$('p').show();
.siblings([selector]) Get all siblings. If a selector is provided, doesn’t return the siblings if they don’t match |
selector {String} The sibling selector |
Returns{_$} The siblings LightQuery object |
// Examples
$('p').siblings();
$('p').siblings('div');
.text([value]) Get/Set the text of each element |
value {String|Function} Text to set or Function returning the text to set |
Returns{String\|_$} The text of each element or the current LightQuery object |
// Examples
$('p').text();
$('p').text('Example');
$('p').text(function(){
return 'Example ' + this.id;
});
.toggle([force]) Toggle each element’s display |
force {Boolean} True to show, False to hide |
Returns{_$} The current LightQuery object |
// Examples
$('p').toggle();
$('p').toggle(true);
$('p').toggle(false);
.toggleClass(classes) Toggle class(es) for each element |
classes {String} Space separated classes to toggle |
Returns{_$} The current LightQuery object |
// Examples
$('p').toggleClass('red');
$('p').toggleClass('blue flash');
.trigger(eventName) Trigger an event for each element |
eventName {String} Event name |
Returns{_$} The current LightQuery object |
// Example
$('p').trigger('click');
.unwrap([selector]) Remove the direct parents of each element, if they match the selector |
selector {String} The parent selector |
Returns{_$} The current LightQuery object |
// Examples
$('p').unwrap();
$('p').unwrap('div');
.val([value]) Get the value of the first element or set the value of each element |
value {Object} The value to set |
Returns{String\|_$} The value of the first element or the current LightQuery object |
// Examples
$('#email').val();
$('#email').val('what@ev.er');
.width() Get the computed width of the first element |
Returns{Number} The computed width of the first element (px) |
// Example
const width = $('div').width();
.wrap(wrapper) Wrap each element |
wrapper {Element|NodeList|Array|String|_$} The wrapper |
Returns{_$} The current LightQuery object |
// Examples
$('p').wrap('<div></div>');
$('p').wrap('section');
$('p').wrap(section);
.wrapAll(wrapper) Wrap all elements |
wrapper {Element|NodeList|Array|String|_$} The wrapper |
Returns{_$} The current LightQuery object |
// Examples
$('p').wrapAll('<div></div>');
$('p').wrapAll('section');
$('p').wrapAll(section);