Merhaba Arkadaşlar,
Çalıştığım iş yerinde, bu aralar frontend tarafında, ciddi bir performans iyileştirmesi yapmaktayım. Bu noktada, Jquery bağımlılığını kaldırma kararı aldım.
Peki neden böyle bir gereksinim duydum? Bunun aslında cevabı, aşağıdaki performans testinde gizli;
Yukarıdaki tablodan da görüleceği üzere, dom manipülasyonlarında yalın js yazmak ciddi bir performans kazanımı sağlamaktadır. Burada Vanilla Js diye bahsedilen kısmın, yalın javascript olduğu gözden kaçmamalıdır.
JQuery ile kullanılan metodların, Javascript üzerinde alternatiflerinin neler olduğunu, inşallah başlıklar halinde inceleyeceğiz.
Örneklerin çoğunu, youmightnotneedjquery.com sitesinden aldım.
Jquery'nin en popüler olduğu alan, geniş seçici desteğiydi. Css seçicilerini doğrudan kullanabilmek gerçekten büyük bir nimetti. Bu imkan, Sizzle Js kütüphanesi ile dahili olarak sağlanmaktaydı.
Ancak Internet Explorer 9 ve diğer modern tarayıcılar ile birlikte, artık bu tarz seçicileri, doğrudan Javascript ile çağırabilir hale geldik.
Id Seçici (Id Selector)
Jquery
$("#id ismi")
Javascript
document.getElementById("id ismi");
Class Seçici (Class Selector)
Jquery
$(".class ismi")
Javascript
document.getElementsByClassName("class ismi");
Sonraki Eleman Seçici (Next Selector)
Jquery
$(el).next();
Javascript
el.nextElementSibling
Önceki Eleman Seçici (Prev Selector)
Jquery
$(el).prev();
Javascript
el.prevElementSibling
Çocuk Eleman Seçici (Child Selector)
Jquery
$(el).children();
Javascript
el.children
Üst Eleman Seçici (Parent Selector)
Jquery
$(el).parent();
Javascript
el.parentNode
Üst En Yakın Eleman Seçici (Verilen Seçiciye Göre) (Closest Selector)
Jquery
$(el).closest("selector");
Javascript
el.closest("selector")
Not : closest metodu Internet Explorer'da çalışmıyor.
Kardeş Eleman Seçici (Siblings Selector)
Jquery
$(el).siblings();
Javascript
Array.prototype.filter.call(el.parentNode.children, function(child){
return child !== el;
});
Özel Seçiciler
".buttons>.i" şeklinde özel bir seçici yazacaksak eğer şu şekillerde çağırım yapabiliyoruz.
Jquery
$(".buttons>.i");
Javascript
document.querySelector(".buttons>.i");
Burada dikkat çeken husus, yukarıdaki seçim yönteminde, eşleşme sağlanan ilk eleman gelir.
document.querySelectorAll(".buttons>.i");
Bu yöntemde ise eşleşen bütün elemanlar gelecektir.
Get
Jquery
$.ajax({
type: 'GET',
url: '/my/url',
success: function(resp) {
},
error: function() {
}
});
Javascript
var request = new XMLHttpRequest();
request.open('GET', '/my/url', true);
request.onload = function() {
if (this.status >= 200 && this.status < 400) {
var resp = this.response;
} else {
}
};
request.onerror = function() {
};
request.send();
Post
Jquery
$.ajax({
type: 'POST',
url: '/my/url',
data: data
});
Javascript
var request = new XMLHttpRequest();
request.open('POST', '/my/url', true);
request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8');
request.send(data);
Animasyonlu Gösterme (Fade In)
Jquery
$(el).fadeIn();
Javascript
el.classList.add('show');
el.classList.remove('hide');
.show {
transition: opacity 400ms;
}
.hide {
opacity: 0;
}
Css
.show {
transition: opacity 400ms;
}
.hide {
opacity: 0;
}
Gizleme (Hide)
Jquery
$(el).hide();
Javascript
el.style.display = 'none';
Gösterme (Show)
Jquery
$(el).show();
Javascript
el.style.display = '';
Class Ekleme (Add Class)
Jquery
$(el).addClass(className);
Javascript
el.classList.add(className);
Class Kaldırma (Remove Class)
Jquery
$(el).removeClass(className);
Javascript
el.classList.remove(className);
Class'ın Olup Olmadığını Kontrol Etme (Has Class)
Jquery
$(el).hasClass(className);
Javascript
el.classList.contains(className);
Class'ı Terse Çevirme (Toggle Class)
Jquery
$(el).toggleClass(className);
Javascript
el.classList.toggle(className);
Seçilen Elemanın Sonrasına Html Ekleme (Insert After)
Jquery
$(el).after(htmlString);
Javascript
el.insertAdjacentHTML('afterend', htmlString);
Seçilen Elemanın Öncesine Html Ekleme (Insert Before)
Jquery
$(el).before(htmlString);
Javascript
el.insertAdjacentHTML('beforebegin', htmlString);
Seçilen Elemanın Dış Html'ini Değiştirme (Replace Outer Html)
Jquery
$(el).replaceWith(string);
Javascript
el.outerHTML = string;
Seçilen Elemanın İç Html'ini Değiştirme (Replace Inner Html)
Jquery
$(el).html(string);
Javascript
el.innerHTML = string;
Seçilen Elemanın İç Text'ini Değiştirme (Replace Inner Text)
Bu işlemin, yukarıdaki işlemden farkı, içerideki html düğümlerine müdahele etmeyip, sadece text içeriğini değiştirmesidir.
Jquery
$(el).text(string);
Javascript
el.textContent = string;
Seçilen Elemanın İç Html'ine, Elemen Ekleme (Append Element)
Jquery
$(parent).append(el);
Javascript
parent.appendChild(el);
Elemanın Html'ini Silme (Empty Element)
Jquery
$(el).empty();
Javascript
el.innerHTML = '';
Elemanın Kopyasını Alma (Clone Element)
Jquery
$(el).clone();
Javascript
el.cloneNode(true);
Elemanın İçerisinde, Seçili Elemanın Olup Olmadığını Kontrol Etme (Contains Element)
Jquery
$.contains(el, child);
Javascript
el !== child && el.contains(child);
Elemanın İçerisinde, Verilen Seçiciye Uyan Elemanın, Olup Olmadığını Kontrol Etme (Contains Selector)
Jquery
$(el).find(selector).length;
Javascript
el.querySelector(selector) !== null
Döngü (Each)
Jquery
$(selector).each(function(i, el){
});
Javascript
var elements = document.querySelectorAll(selector);
Array.prototype.forEach.call(elements, function(el, i){
});
Elemanın İç Html'ini Alma (Get Inner Html)
Jquery
$(el).html();
Javascript
el.innerHTML
Elemanın Dış Html'ini Alma (Get Outer Html)
Jquery
$('<div>').append($(el).clone()).html();
Javascript
el.outerHTML
Elemanın Text'ini Alma (Get Text)
Jquery
$(el).text();
Javascript
el.textContent
Elemanın Text'ini Güncelleme (Set Text)
Jquery
$(el).text(string);
Javascript
el.textContent = string;
Elemanın Css'ini Alma (Get Css)
Jquery
$(el).css(ruleName);
Javascript
getComputedStyle(el)[ruleName];
Elemana Css Ekleme (Set Css)
Jquery
$(el).css('border-width', '20px');
Javascript
el.style.borderWidth = '20px';
Elemanlara Eşitlik Kontrolü Yapma (Match Element)
Jquery
$(el).is($(otherEl));
Javascript
el === otherEl
Elemanlara Seçici Üzerinden Eşitlik Kontrolü Yapma (Match Element Selector)
Jquery
$(el).is('.my-class');
Javascript
var matches = function(el, selector) {
return (el.matches || el.matchesSelector || el.msMatchesSelector || el.mozMatchesSelector || el.webkitMatchesSelector || el.oMatchesSelector).call(el, selector);
};
matches(el, '.my-class');
Elemanı Dom'dan Silme (Remove Element)
Jquery
$(el).remove();
Javascript
el.parentNode.removeChild(el);
Elemanların Döküman Elemanına Olan Mesafesini Alma (Offset)
Jquery
$(el).offset();
Javascript
var rect = el.getBoundingClientRect();
{
top: rect.top + document.body.scrollTop,
left: rect.left + document.body.scrollLeft
}
Elemanların Bir Üst Elemanına Olan Mesafesini Alma (Offset Parent Element)
Jquery
$(el).offsetParent();
Javascript
el.offsetParent || el
Elemanların Dikey Mesafesini Alma (Offset Height)
Jquery
$(el).outerHeight();
Javascript
el.offsetHeight
Elemanların Dikey Mesafesini, Margin'i de Dahil Ederek Alma (Offset Height With Margin)
Jquery
$(el).outerHeight(true);
Javascript
function outerHeight(el) {
var height = el.offsetHeight;
var style = getComputedStyle(el);
height += parseInt(style.marginTop) + parseInt(style.marginBottom);
return height;
}
outerHeight(el);
Elemanların Yatay Mesafesini Alma (Offset Width)
Jquery
$(el).outerWidth();
Javascript
el.offsetWidth
Elemanların Yatay Mesafesini, Margin'i de Dahil Ederek Alma (Offset Width With Margin)
Jquery
$(el).outerWidth(true);
Javascript
function outerWidth(el) {
var width = el.offsetWidth;
var style = getComputedStyle(el);
width += parseInt(style.marginLeft) + parseInt(style.marginRight);
return width;
}
outerWidth(el);
Elemanların Display'lerine Göre Pozisyonlarını Allma (Position)
Jquery
$(el).position();
Javascript
{left: el.offsetLeft, top: el.offsetTop}
Elemanların Viewport'a Göre Pozisyonlarını Alma (Position To Viewport)
Jquery
var offset = el.offset();
{
top: offset.top - document.body.scrollTop,
left: offset.left - document.body.scrollLeft
}
Javascript
el.getBoundingClientRect()
Elemanların Attribute'sini Alma (Get Attribute)
Jquery
$(el).attr('tabindex');
Javascript
el.getAttribute('tabindex');
Elemanlara Attribute Ekleme (Set Attribute)
Jquery
$(el).attr('tabindex', 3);
Javascript
el.setAttribute('tabindex', 3);
Olay Ekleme (On)
Jquery
$(el).on(eventName, eventHandler);
Javascript
el.addEventListener(eventName, eventHandler);
Olay Kaldırma (Off)
Jquery
$(el).off(eventName, eventHandler);
Javascript
el.removeEventListener(eventName, eventHandler);
Dökümanın Yüklenmesi Tamamlandı Olayı (Document Ready)
Jquery
$(document).ready(function(){
});
Javascript
function ready(fn) {
if (document.attachEvent ? document.readyState === "complete" : document.readyState !== "loading"){
fn();
} else {
document.addEventListener('DOMContentLoaded', fn);
}
}
Varsayılan Olarak Tanımlı Olay Tetikleme (Trigger Native Event)
Jquery
$(el).trigger('change');
Javascript
var event = document.createEvent('HTMLEvents');
event.initEvent('change', true, false);
el.dispatchEvent(event);
Özel Olarak Tanımlanmış Olayı Tetikleme (Trigger Custom Event)
Jquery
$(el).trigger('my-event', {some: 'data'});
Javascript
if (window.CustomEvent) {
var event = new CustomEvent('my-event', {detail: {some: 'data'}});
} else {
var event = document.createEvent('CustomEvent');
event.initCustomEvent('my-event', true, true, {some: 'data'});
}
el.dispatchEvent(event);
Nesne Birleştirme (Extend)
Jquery
$.extend({}, objA, objB);
Javascript
var extend = function(out) {
out = out || {};
for (var i = 1; i < arguments.length; i++) {
if (!arguments[i])
continue;
for (var key in arguments[i]) {
if (arguments[i].hasOwnProperty(key))
out[key] = arguments[i][key];
}
}
return out;
};
extend({}, objA, objB);
Nesneyi Alt Nesneleriyle Birleştirme (Deep Extend)
Jquery
$.extend(true, {}, objA, objB);
Javascript
var deepExtend = function(out) {
out = out || {};
for (var i = 1; i < arguments.length; i++) {
var obj = arguments[i];
if (!obj)
continue;
for (var key in obj) {
if (obj.hasOwnProperty(key)) {
if (typeof obj[key] === 'object')
out[key] = deepExtend(out[key], obj[key]);
else
out[key] = obj[key];
}
}
}
return out;
};
deepExtend({}, objA, objB);
Nesnenin Liste Olup Olmadığını Kontrol Etme (Is Array)
Jquery
$.isArray(arr);
Javascript
Array.isArray(arr);
Map Döngüsü (Map)
Jquery
$.map(array, function(value, index){
});
Javascript
array.map(function(value, index){
});
Html Parse Etme
Jquery
$.parseHTML(htmlString);
Javascript
var parseHTML = function(str) {
var tmp = document.implementation.createHTMLDocument();
tmp.body.innerHTML = str;
return tmp.body.children;
};
parseHTML(htmlString);
Json Parse Etme
Jquery
$.parseJSON(string);
Javascript
JSON.parse(string);
Yazıyı Trim Etme (Trim Text)
Jquery
$.trim(string);
Javascript
string.trim();
Nesnenin Tipini Alma (Type)
Jquery
$.type(obj);
Javascript
Object.prototype.toString.call(obj).replace(/\[object (.+)\]/, '$1').toLowerCase();