<!DOCTYPE html>
<html lang="fa">
<head>
<meta charset="UTF-8">
<title>پروژه باحال من</title>
</head>
<body>
<script src="JQuery.js"></script>
</body>
</html>
انتخابگر جیکوئری
...یکی از دلایل محبوبیت JQuery، سادهسازی انتخابگر های خود Javascript برای انتخاب عناصر موجود در DOM میباشد، برای ایجاد همین قابلیت شیرین انتخاب با $ بهجای نوشتن دستورات طولانی برای کار با انواع Selector ها میتونیم تابع زیر رو یکبار تعریف کنیم و بعدش از $ بهعنوان انتخابگر استفاده کنیم:
function $(query) {
return document.querySelectorAll(query);
}
// بعد از تعریف، میتونیم استفاده کنیم
$('Selector');
$('Selector');
ایجکس (AJAX)
ایجکس (JSON)
...قابلیت گرفتن اطلاعات بهصورت AJAX با ساختار JSON بهصورت یک آبجکت قابل دسترس در لایه کدنویسی، از دیگر قابلیت های پرکاربرد جیکوئری میباشد
var request = new XMLHttpRequest();
request.open('GET', '/my/url', true);
request.onload = function() {
if (this.status >= 200 && this.status < 400) {
// درخواست موفق و نتیجه صحیح
var data = JSON.parse(this.response);
} else {
// اتصال موفق ولی نتیجه با خطا
}
};
request.onerror = function() {
// مشکل اتصال به سرور
};
request.send();
$.getJSON('/my/url', function(data) {
});
ایجکس (GET)
...قابلیت ارسال درخواست GET بهشکل AJAX در کتابخانه جیکوئری نیز از طریق کد های زیر میسر میباشد
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();
$.ajax({
type: 'GET',
url: '/my/url',
success: function(resp) {
},
error: function() {
}
});
ایجکس (POST)
...قابلیت ارسال درخواست POST بهشکل AJAX در کتابخانه جیکوئری نیز از طریق کد های زیر میسر میباشد
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);
$.ajax({
type: 'POST',
url: '/my/url',
data: data
});
افکتها
محو شدن به داخل (Fade In)
...افکت محو شدن به سمت داخل نیز یکی از قابلیت های پرکاربرد جیکوئری میباشد که بهراحتی میتوان با دو خط اسکریپت و چند خط استایل پیاده کرد
el.classList.add('show');
el.classList.remove('hide');
.show {
transition: opacity 400ms;
}
.hide {
opacity: 0;
}
$(el).fadeIn();
محو شدن به بیرون (Fade Out)
...افکت محو شدن به سمت بیرون نیز یکی از قابلیت های پرکاربرد جیکوئری میباشد که بهراحتی میتوان با دو خط اسکریپت و چند خط استایل پیاده کرد
el.classList.add('hide');
el.classList.remove('show');
.show {
opacity: 1;
}
.hide {
opacity: 0;
transition: opacity 400ms;
}
$(el).fadeOut();
پنهان شدن
...افکت پنهان کردن عناصر توسط جیکوئری را نیز میتوان با استفاده از یک خط اسکریپت با تغییر استایل، پیاده کرد
el.style.display = 'none';
$(el).hide();
ظاهر شدن
...افکت ظاهر شدن عناصر توسط جیکوئری را نیز میتوان با استفاده از یک خط اسکریپت با تغییر استایل، پیاده کرد
el.style.display = '';
$(el).show();
عناصر
افزودن کلاس
...متد زیر برای افزودن کلاس به یک عنصر بهکار میرود که میتوان معادل جیکوئری آنرا با جاوا اسکریپت به شکل زیر پیاده کرد
el.classList.add(className);
$(el).addClass(className);
حذف کلاس
...برای حذف یک کلاس یا همان Class از یک عنصر میتوان از متد زیر استفاده نمود
el.classList.remove(className);
$(el).removeClass(className);
داشتن کلاس مشخص (Has Class)
...برای اطلاع از مشمولیت یک عنصر از یک کلاس مشخص میتوان از متد زیر استفاده نمود
el.classList.contains(className);
$(el).hasClass(className);
افزودن/حذف کلاس (Toggle)
...برای افزودن در صورت عدم وجود، یا حذف درصورت وجود یک کلاس در یک عنصر، یا همان Toggle کردن یک کلاس میتوان از متد زیر استفاده نمود
el.classList.toggle(className);
$(el).toggleClass(className);
قبل (Before)
...متد زیر برای کار با شبهعنصر Before در عناصر بهکار میرود که میتوان معادل جیکوئری آنرا با جاوا اسکریپت به شکل زیر پیاده کرد
target.insertAdjacentElement('beforebegin', element);
$(target).before(element);
بَعد (After)
...متد زیر برای کار با شبهعنصر After در عناصر بهکار میرود که میتوان معادل جیکوئری آنرا با جاوا اسکریپت به شکل زیر پیاده کرد
target.insertAdjacentElement('afterend', element);
$(target).after(element);
ضمیمه در ابتدا (Prepend)
...با استفاده از متد Prepend میتوان یک عنصری را به ابتدای یک عنصر دیگر اضافه نمود و معادل آن در جاوا اسکریپت خام به شکل زیر میباشد
parent.insertBefore(el, parent.firstChild);
$(parent).prepend(el);
ضمیمه در انتها (Append)
...با استفاده از متد Append میتوان یک عنصری را به انتهای یک عنصر دیگر اضافه نمود و معادل آن در جاوا اسکریپت خام به شکل زیر میباشد
parent.appendChild(el);
$(parent).append(el);
والد (Parent)
...برای دسترسی به والد یا همان Parent یک عنصر میتوان از متد زیر استفاده نمود
el.parentNode
$(el).parent();
فرزندان (Children)
...از متد Children برای دسترسی به فرزندان یک عنصر استفاده میشود که میتوان به راحتی با جاوا اسکریپت ساده بهآن دسترسی پیدا کرد
el.children
$(el).children();
جفتسازی (Clone)
...برای جفتسازی (کپی/تکثیر) یک عنصر از متد Clone استفاده میشود که میتوان طبق نمونه زیر بهکار برد
el.cloneNode(true);
$(el).clone();
حذف (Remove)
...برای حذف یک عنصر از DOM و از بین بردن کامل آن میتوان از متد زیر استفاده نمود
el.parentNode.removeChild(el);
$(el).remove();
خالی کردن (Empty)
...برای خالی کردن یک عنصر و حذف تمامی فرزندان زیرمجموعه آن عنصر میتوان از متد زیر استفاده نمود
while(el.firstChild)
el.removeChild(el.firstChild);
$(el).empty();
به ازای هرکدام (Each)
...برای ایجاد یک تکرار حلقه به ازای هرکدام از عناصر موجود در دامنه انتخابگر میتوان از تابع زیر استفاده نمود
var elements = document.querySelectorAll(selector);
elements.forEach(function(el, i){
});
$(selector).each(function(i, el){
});
فیلتر کردن (Filter)
...برای اعمال فیلتر انتخابگر میتوان از تکه کد زیر بهعنوان جایگزین تابع جیکوئری استفاده نمود
[...document.querySelectorAll(selector)].filter(filterFn);
$(selector).filter(filterFn);
یافتن فرزندان (Find Children)
...برای دسترسی به فرزندان یک عنصر از طریق انتخابگر، میتوان از تکه کد زیر بهعنوان معادل جیکوئری آن استفاده نمود
el.querySelectorAll(selector);
$(el).find(selector);
یافتن عناصر (Find Elements)
...برای دسترسی مستقیم به یک عنصر بهجای استفاده از انتخابگر $ میتوان از تکه کد زیر بهصورت مستقیم استفاده نمود
document.querySelectorAll('.my #awesome selector');
$('.my #awesome selector');
گرفتن خصوصیات (Attributes)
...برای دسترسی به خصوصیات یا همان Attribute های یک عنصر میتوان از معادل زیر استفاده نمود
el.getAttribute('tabindex');
$(el).attr('tabindex');
تنظیم خاصیت (Attributes)
...برای تنظیم خصوصیات یا همان Attribute های یک عنصر میتوان از متد زیر استفاده نمود
el.setAttribute('tabindex', 3);
$(el).attr('tabindex', 3);
حذف خاصیت (Attribute)
...برای حذف یکی از خاصیتها یا همان Attribute های یک عنصر میتوان از متد زیر استفاده نمود
el.removeAttribute('tabindex');
$(el).removeAttr('tabindex');
گرفتن محتوای داخلی (Inner HTML)
...برای دسترسی به محتوای داخلی یا همان Inner HTML یک عنصر میتوان از متد زیر استفاده نمود
el.innerHTML
$(el).html();
تنظیم محتوای داخلی (Inner HTML)
...برای تنظیم محتوای HTML داخل یک عنصر میتوان از متد زیر استفاده نمود
el.innerHTML = string;
$(el).html(string);
گرفتن محتوای خارجی (Outer HTML)
...برای دسترسی به محتوای خارجی یا همان Outer HTML یک عنصر میتوان از متد زیر استفاده نمود
el.outerHTML
$(el).prop('outerHTML');
تنظیم محتوای خارجی (Outer HTML)
...برای جایگزین کردن یک عنصر با یک رشته دیگر شامل تگ های HTML میتوان از متد زیر استفاده نمود
el.outerHTML = string;
$(el).replaceWith(string);
گرفتن استایل (Style)
...برای دسترسی به مشخصههایی از استایل های بصری یک عنصر میتوان از متد زیر استفاده نمود
getComputedStyle(el)[ruleName];
$(el).css(ruleName);
تنظیم استایل (Style)
...برای تنظیم استایل یا همان مشخصههای CSS یک عنصر میتوان از متد زیر استفاده نمود
el.style.borderWidth = '20px';
$(el).css('border-width', '20px');
گرفتن متن (Text Content)
...برای دسترسی به محتوای متنی یا همان Text Content یک عنصر میتوان از متد زیر استفاده نمود
el.textContent
$(el).text();
تنظیم متن (Text Content)
...برای تنظیم محتوای متنی یا همان Text Content یک عنصر میتوان از متد زیر استفاده نمود
el.textContent = string;
$(el).text(string);
گرفتن عرض (Width)
...برای دسترسی به عرض یا همان مشخصه Width یک عنصر میتوان از متد زیر استفاده نمود
parseFloat(getComputedStyle(el, null).width.replace("px", ""))
$(el).width();
تنظیم عرض (Width)
...برای تنظیم عرض یا همان Width یک عنصر میتوان از متد زیر استفاده نمود
function setWidth(el, val) {
if (typeof val === "function") val = val();
if (typeof val === "string") el.style.width = val;
else el.style.width = val + "px";
}
setWidth(el, val);
$(el).width(val);
گرفتن ارتفاع (Height)
...برای دسترسی به ارتفاع یا همان مشخصه Height یک عنصر میتوان از متد زیر استفاده نمود
parseFloat(getComputedStyle(el, null).height.replace("px", ""));
$(el).height();
تنظیم ارتفاع (Height)
...برای تنظیم ارتفاع یا همان Height یک عنصر میتوان از متد زیر استفاده نمود
function setHeight(el, val) {
if (typeof val === "function") val = val();
if (typeof val === "string") el.style.height = val;
else el.style.height = val + "px";
}
setHeight(el, val);
$(el).height(val);
مشمولیت (Contains)
...برای اطلاع از مشمولیت یک عنصر در یک عنصر دیگر، از متد Contains استفاده میشود که طبق نمونه زیر میتوان استفاده نمود
el !== child && el.contains(child);
$.contains(el, child);
مشمولیت انتخابگر (Contains Selector)
...برای اطلاع از مشمولیت یک عنصر در یک انتخابگر خاص از متد زیر میتوان بهعنوان نمونه جاوا اسکریپتی خام استفاده نمود
!!el.querySelector(selector);
$(el).find(selector).length;
همخوانی انتخابگر (Matches Selector)
...برای بررسی و اطلاع از همخوانی انتخابگر توسط یک عنصر میتوان از تابع زیر استفاده نمود
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');
$(el).is('.my-class');
شاخص ! (Index)
...برای دسترسی به شاخص یا همان Index یک عنصر میتوان از متد زیر استفاده نمود
function index(el) {
if (!el) return -1;
var i = 0;
do {
i++;
} while (el = el.previousElementSibling);
return i;
}
$(el).index();
وجود شاخص (Index Of)
...برای بررسی وجود یک شاخص یا همان متد Index Of میتوان از متد زیر استفاده نمود
array.indexOf(item);
$.inArray(item, array);
یکسان بودن
...برای مقایسه و بررسی یکسان بودن یا نبودن دو عنصر میتوان از متد زیر استفاده نمود
el === otherEl
$(el).is($(otherEl));
عنصر قبلی (Previous)
...برای دسترسی به عنصر قبلی هموالد با عنصر فعلی میتوان از متد زیر استفاده نمود
el.previousElementSibling
$(el).prev();
عنصر بعدی (Next)
...برای دسترسی به عنصر بعدی هموالد با عنصر فعلی میتوان از متد زیر استفاده نمود
el.nextElementSibling
$(el).next();
موقعیت (Offset)
...برای دسترسی به موقعیت عنصر، از جمله مشخصههای Top و Left و سایر مشخصهها میتوان از متد زیر استفاده نمود
var rect = el.getBoundingClientRect();
{
top: rect.top + document.body.scrollTop,
left: rect.left + document.body.scrollLeft
}
$(el).offset();
موقعیت والد
...برای دسترسی به موقعیت والد یا همان Parent یک عنصر میتوان از متد زیر استفاده نمود
el.offsetParent || el
$(el).offsetParent();
عرض بیرونی
...برای دسترسی به عرض بیرونی یا همان Outer Width یک عنصر میتوان از متد زیر استفاده نمود
el.offsetWidth
$(el).outerWidth();
ارتفاع بیرونی
...برای دسترسی به ارتفاع بیرونی یا همان Outer Height یک عنصر میتوان از متد زیر استفاده نمود
el.offsetHeight
$(el).outerHeight();
عرض بیرونی با حاشیه
...برای دسترسی به عرض بیرونی یک عنصر بههمراه حاشیهها یا همان Margin های آن عنصر میتوان از متد زیر استفاده نمود
function outerWidth(el) {
var width = el.offsetWidth;
var style = getComputedStyle(el);
width += parseInt(style.marginLeft) + parseInt(style.marginRight);
return width;
}
outerWidth(el);
$(el).outerWidth(true);
ارتفاع بیرونی با حاشیه
...برای دسترسی به ارتفاع بیرونی یک عنصر بههمراه حاشیهها یا همان Margin های آن عنصر میتوان از متد زیر استفاده نمود
function outerHeight(el) {
var height = el.offsetHeight;
var style = getComputedStyle(el);
height += parseInt(style.marginTop) + parseInt(style.marginBottom);
return height;
}
outerHeight(el);
$(el).outerHeight(true);
موقعیت (Position)
...برای دسترسی به مختصات یا همان Position یک عنصر، از جمله مشخصههای Top و Left میتوان از متد زیر استفاده نمود
{left: el.offsetLeft, top: el.offsetTop}
$(el).position();
موقعیت نسبت به Viewport
...برای دسترسی به موقعیت و مختصات عنصر نسبت به محل نمایش یا همان Viewport میتوان از متد زیر استفاده نمود
el.getBoundingClientRect()
var offset = el.offset();
{
top: offset.top - document.body.scrollTop,
left: offset.left - document.body.scrollLeft
}
هموالدها (Siblings)
...برای دسترسی به دوستان هموالد یا همان Sibling های یک عنصر میتوان از متد زیر استفاده نمود
Array.prototype.filter.call(el.parentNode.children, function(child){
return child !== el;
});
$(el).siblings();
رویدادها
آمادگی (Ready)
...برای تعریف رویداد جهت اجرا پس از آماده شدن سند یا همان Document Ready میتوان از تابع زیر استفاده نمود
function ready(fn) {
if (document.readyState != 'loading'){
fn();
} else {
document.addEventListener('DOMContentLoaded', fn);
}
}
$(document).ready(function(){
});
افزودن رویداد
...برای افزودن یک رویداد یا همان Event میتوان از متد زیر استفاده نمود
el.addEventListener(eventName, eventHandler);
$(el).on(eventName, eventHandler);
حذف رویداد
...برای حذف یک رویداد یا همان Event میتوان از متد زیر استفاده نمود
el.removeEventListener(eventName, eventHandler);
$(el).off(eventName, eventHandler);
افزودن نمایندگی رویداد (Delegate)
...برای نمایندگی یک رویداد یا به اصطلاح Delegate کردن یک رویداد میتوان از متد زیر استفاده نمود
document.addEventListener(eventName, function(e) {
for (var target = e.target; target && target != this; target = target.parentNode) {
if (target.matches(elementSelector)) {
handler.call(target, e);
break;
}
}
}, false);
$(document).on(eventName, elementSelector, handler);
راهاندازی شخصی (Custom Trigger)
...برای راهاندازی شخصی یک رویداد یا همان Custom Trigger کردن رویداد میتوان از متد زیر استفاده نمود
if (window.CustomEvent && typeof window.CustomEvent === 'function') {
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);
$(el).trigger('my-event', {some: 'data'});
راهاندازی محلی (Native Trigger)
...برای راهاندازی محلی یک رویداد یا همان Native Trigger کردن رویداد میتوان از متد زیر استفاده نمود
var event = document.createEvent('HTMLEvents');
event.initEvent('change', true, false);
el.dispatchEvent(event);
$(el).trigger('change');
متفرقه
به ازای هر (For Each)
...برای ایجاد تابعی برای اجرا در حلقه به ازای هر یا همان For Each اعضای یک آرایه میتوان از متد زیر استفاده نمود
array.forEach(function(item, i){
});
$.each(array, function(i, item){
});
ترکیب (Bind)
...برای استفاده از متد Proxy در جیکوئری که برای Bind توابع بهکار میرود، میتوان از متد زیر استفاده نمود
fn.bind(context);
$.proxy(fn, context);
گسترش (Extend)
...برای استفاده از متد گسترش یا همان Extend در جیکوئری میتوان از متد زیر استفاده نمود
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);
$.extend({}, objA, objB);
گسترش عمیق (Deep Extend)
...برای استفاده از متد گسترش عمیق یا همان Deep Extend در جیکوئری میتوان از متد زیر استفاده نمود
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'){
if(obj[key] instanceof Array == true)
out[key] = obj[key].slice(0);
else
out[key] = deepExtend(out[key], obj[key]);
}
else
out[key] = obj[key];
}
}
}
return out;
};
deepExtend({}, objA, objB);
$.extend(true, {}, objA, objB);
آرایه بودن/نبودن
...برای بررسی آرایه بودن یا نبودن یک شیء میتوان از متد زیر استفاده نمود
Array.isArray(arr);
$.isArray(arr);
نقشه (Map)
...برای کار با Map در جاوا اسکریپت میتوان از معادل جیکوئری زیر استفاده نمود
array.map(function(value, index){
});
$.map(array, function(value, index){
});
زمان حال (Now)
...برای دسترسی به زمان حال یا همان Now میتوان از متد زیر استفاده نمود
Date.now();
$.now();
تجزیه HTML
...برای تجزیه یا همان Parse کردن یک رشته از نوع HTML میتوان از تابع زیر استفاده نمود
var parseHTML = function(str) {
var tmp = document.implementation.createHTMLDocument();
tmp.body.innerHTML = str;
return tmp.body.children;
};
parseHTML(htmlString);
$.parseHTML(htmlString);
تجزیه JSON
...برای تجزیه یا همان Parse کردن یک رشته از نوع JSON میتوان از تابع زیر استفاده نمود
JSON.parse(string);
$.parseJSON(string);
تکه کردن (Slice)
...برای تکهتکه کردن عناصر و دسترسی به آنها از طریق متد Slice میتوان از متد زیر استفاده نمود
els.slice(begin, end);
$(els).slice(begin, end);
برش (Trim)
...برای برش یا همان Trim کردن یک رشته میتوان از متد زیر استفاده نمود
string.trim();
$.trim(string);
نوع (Type)
...برای اطلاع از نوع یا همان Type یک شی میتوان از متد زیر استفاده نمود
Object.prototype.toString.call(obj).replace(/^\[object (.+)\]$/, '$1').toLowerCase();
$.type(obj);
معرفی ابزار: درصورتی که از ادیتور VSCode یا سایر زیرشاخههای CodeOSS استفاده میکنید، افزونه No JQuery Snippets میتواند کمک بزرگی به شما در زمینه مهاجرت از JQuery به Javascript خام کند، این افزونه با دارا بودن اسنیپتهای آماده میتواند سرعت کدنویسی شما را تسریع بخشد، البته نیازمند به ذکر است که این افزونه ارتباطی با این سایت ندارد و توسط یک توسعهدهنده خارجی آمادهسازی شده است و ما صرفا وظیفه معرفی آنرا بر عهده گرفتهایم
نکته: در این صفحه از کتابخانه JQuery استفاده نشده است، دلیل تشخیص استفاده از JQuery توسط افزونه هایی مثل Wapplyzer بهعلت نوشتن کد های دارای ساختار JQuery میباشد و بهجهت اطمینان میتوانید سورسکد کامل این پروژه را در گیتهاب مطالعه کنید.
در نهایت، برای سلب مسئولیت باید خدمتتون عرض کنم که ما نمیگیم که نباید از JQuery یا بقیه دوستانش استفاده کرد، بلکه صحبت ما سر این هست که تنبلی رو کنار بزاریم و چون بلد نیستیم یا حوصله نداریم یاد بگیریم، نیایم و چندین مگابایت فریمورک و کتابخونه لود کنیم توی پروژه، چون پرفرمنس واقعا مهم هست و در اشاره به اون عده از دوستانی که با حالت متفکرانهای میگویند: "چرخ را نباید مجددا اختراع کرد" باید عرض کنم که این صفحه خوشگل و پر محتوا، بههمراه سه نوع فونتفیس لود شده و کل محتویات، حدود 300 کیلوبایت هست، اونوقت یه صفحه گلمنگلی که توش JQuery و Bootstrap و بقیه دوستانش رو لود میکنید، چندین مگابایت حجمش میشه و سریع توی بیوگرافی مینویسید "آیم وب دولوپر"، راستش ایرانخودرو هم ماشین تولید میکنه، تسلا هم ماشین تولید میکنه و خوشبختانه جفتشون هم کار میکنند