jQuery یا JavaScript
جی کوئری در سال 2009 و توسط آقای John Resig معرفی/ساخته شد. هدف آقای John Resig از ارائه ی جی کوئری برطرف کردن ناسازگاری های مرورگرها در ورژن های مختلف و ساده کردن عملیات های مختلف مانند دستکاری HTML DOM و مدیریت رویداد ها و انیمیشن ها و AJAX و … بود.
پس از نسخه ی 5 جاوا اسکریپت که در سال 2009 معرفی شد، می توان بسیاری از کارهایی که جی کوئری می کرد را با چند خط جاوا اسکریپت ساده انجام داد.
در این مقاله میخواهیم برخی از کارایی های جی کوئری را با جاوا اسکریپت ساده مقایسه کنیم.
پیدا کردن عناصر بر اساس id
فرض کنید عنصری داشته باشیم که id آن برابر "id="id01
باشد. برای پیدا کردن آن در جی کوئری می گوییم:
<!DOCTYPE html> <html> <head> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.0/jquery.min.js"></script> </head> <body> <h2>Finding HTML Elements by Id</h2> <p id="id01">سلام بر دنیا</p> <p id="id02">سلام بر ایران</p> <p id="id03">سلام بر تهران</p> <p id="demo"></p> <script> $(document).ready(function() { var myElements = $("#id01"); $("#demo").text("The text from the id01 paragraph is: " + myElements[0].innerHTML); }); </script> </body> </html>
اما در جاوا اسکریپت می نویسیم:
<!DOCTYPE html> <html> <body> <h2>Finding HTML Elements by Id</h2> <p id="id01">سلام بر دنیا</p> <p id="id02">سلام بر ایران</p> <p id="id03">سلام بر تهران</p> <p id="demo"></p> <script> var myElement = document.getElementById("id01"); document.getElementById("demo").innerHTML = "The text from the id01 paragraph is: " + myElement.innerHTML; </script> </body> </html>
پیدا کردن عناصر بر اساس نام تگ
فرض کنید می خواهیم تمام تگ های <p> را پیدا کنیم. در جی کوئری می گوییم:
<!DOCTYPE html> <html> <head> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.0/jquery.min.js"></script> </head> <body> <h2>Finding HTML Elements by Tag Name</h2> <p>سلام بر دنیا</p> <p>سلام بر ایران</p> <p>سلام بر تهران</p> <p id="demo"></p> <script> $(document).ready(function() { var myElements = $("p"); $("#demo").text("The text in the first paragraph is: " + myElements[0].innerHTML); }); </script> </body> </html>
اما در جاوا اسکریپت ساده می گوییم:
<!DOCTYPE html> <html> <body> <h2>Finding HTML Elements by Tag Name</h2> <p>سلام بر دنیا</p> <p>سلام بر ایران</p> <p>سلام بر تهران</p> <p id="demo"></p> <script> var myElements = document.getElementsByTagName("p"); document.getElementById("demo").innerHTML = "The text in the first paragraph is: " + myElements[0].innerHTML; </script> </body> </html>
پیدا کردن عناصر بر اساس کلاس
فرض کنید بخواهیم عناصری را پیدا کنیم که کلاسشان "class="intro
باشد. در جی کوئری می گوییم:
<!DOCTYPE html> <html> <head> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> </head> <body> <h2>Finding HTML Elements by Class Name</h2> <p class="intro">سلام بر دنیا</p> <p class="intro">سلام بر ایران</p> <p class="intro">سلام بر تهران</p> <p id="demo"></p> <script> $(document).ready(function() { var myElements = $(".intro"); $("#demo").text("The first paragraph with class='intro' is: " + myElements[0].innerHTML); }); </script> </body> </html>
اما در جاوا اسکریپت ساده می گوییم:
<!DOCTYPE html> <html> <body> <h2>Finding HTML Elements by Class Name</h2> <p class="intro">سلام بر دنیا</p> <p class="intro">سلام بر ایران</p> <p class="intro">سلام بر تهران</p> <p id="demo"></p> <script> var myElements = document.getElementsByClassName("intro"); document.getElementById("demo").innerHTML = "The first paragraph with class='intro' is: " + myElements[0].innerHTML; </script> </body> </html>
نکته: پیدا کردن عناصر بر اساس نام کلاسشان در IE8 و نسخه های قبل تر آن کار نمی کند.
پیدا کردن عناصر بر اساس سلکتور CSS
فرض کنید می خواهیم تمام عناصر <p> را برگردانیم که کلاس "class="intro
را داشته باشند. در جی کوئری می گوییم:
<!DOCTYPE html> <html> <head> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.0/jquery.min.js"></script> </head> <body> <h2>Finding HTML Elements by Query Selector</h2> <p class="intro">سلام بر دنیا</p> <p class="intro">سلام بر ایران</p> <p class="intro">سلام بر تهران</p> <p id="demo"></p> <script> $(document).ready(function() { var myElements = $("p.intro"); $("#demo").text("The first paragraph with class='intro' is: " + myElements[0].innerHTML); }); </script> </body> </html>
اما در جاوا اسکریپت ساده می گوییم:
<!DOCTYPE html> <html> <body> <h2>Finding HTML Elements by Query Selector</h2> <p class="intro">سلام بر دنیا</p> <p class="intro">سلام بر ایران</p> <p class="intro">سلام بر تهران</p> <p id="demo"></p> <script> var myElements = document.querySelectorAll("p.intro"); document.getElementById("demo").innerHTML = "The first paragraph with class='intro' is: " + myElements[0].innerHTML; </script> </body> </html>
نکته: دستور querySelectorAll در IE8 و نسخه های قبل تر آن کار نمی کند.
تعیین محتوای متنی
فرض کنید می خواهیم inner text (محتوای متنی که کاربر می بیند) یک عنصر HTML را تغییر داده یا تعیین کنیم. در جی کوئری می گوییم:
<!DOCTYPE html> <html> <head> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.0/jquery.min.js"></script> </head> <body> <h1>Setting Text Content</h1> <h2 id="01">سلام بر دنیا</h2> <h2 id="02">سلام بر ایران</h2> <script> $(document).ready(function() { var myElement = $("#01"); myElement.text("سلام بر تهران"); }); </script> </body> </html>
اما در جاوا اسکریپت ساده می نویسیم:
<!DOCTYPE html> <html> <body> <h1>Setting Text Content</h1> <h2 id="01">سلام بر دنیا</h2> <h2 id="02">سلام بر ایران</h2> <script> var myElement = document.getElementById("01"); myElement.textContent = "سلام بر تهران"; </script> </body> </html>
دریافت محتوای متنی
ما می دانیم که چطور محتوای متنی را تعیین کنیم اما چطور می توانیم آن را دریافت کنیم؟ برای دریافت inner text در جی کوئری می گوییم:
<!DOCTYPE html> <html> <head> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.0/jquery.min.js"></script> </head> <body> <h1>Getting Text Content</h1> <h2 id="01">سلام بر دنیا</h2> <h2 id="02">سلام بر ایران</h2> <h2 id="03">سلام بر تهران</h2> <p id="demo"></p> <script> $(document).ready(function() { var myElement = $("#02"); var myText = myElement.text(); $("#demo").text(myText); }); </script> </body> </html>
اما در جاوا اسکریپت ساده می توانیم بنویسیم:
<!DOCTYPE html> <html> <body> <h1>Getting Text Content</h1> <h2 id="01">سلام بر دنیا</h2> <h2 id="02">سلام بر ایران</h2> <h2 id="03">سلام بر تهران</h2> <p id="demo"></p> <script> var myElement = document.getElementById("02"); var myText = myElement.textContent || myElement.innerText; document.getElementById("demo").innerHTML = myText; </script> </body> </html>
ساخت محتوای HTML
اگر بخواهیم کدهای HTML یک عنصر را در جی کوئری بسازیم می گوییم:
<!DOCTYPE html> <html> <head> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.0/jquery.min.js"></script> </head> <body> <h1>Setting HTML</h1> <div id="01"> <h2 >سلام بر دنیا</h2> </div> <div id="02"> <h2 >سلام بر ایران</h2> </div> <p id="demo"></p> <script> $(document).ready(function() { var myElement = $("#02"); myElement.html("<p>سلام بر تهران</p>"); }); </script> </body> </html>
اما در جاوا اسکریپت ساده می نویسیم:
<!DOCTYPE html> <html> <body> <h1>Setting HTML</h1> <div id="01"> <h2 >سلام بر دنیا</h2> </div> <div id="02"> <h2 >سلام بر ایران</h2> </div> <p id="demo"></p> <script> var myElement = document.getElementById("02"); myElement.innerHTML = "<p>سلام بر تهران</p>"; </script> </body> </html>
دریافت محتوای HTML
برای دریافت کدهای HTML یک عنصر از طریق جی کوئری می گوییم:
<!DOCTYPE html> <html> <head> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.0/jquery.min.js"></script> </head> <body> <h1>Setting HTML</h1> <div id="01"> <h2 >سلام بر دنیا</h2> </div> <div id="02"> <h2 >سلام بر ایران</h2> </div> <script> $(document).ready(function() { var content = $("#02").html(); $("#01").html(content); }); </script> </body> </html>
اما در جاوا اسکریپت ساده می نویسیم:
<!DOCTYPE html> <html> <body> <h1>Setting HTML</h1> <div id="01"> <h2 >سلام بر دنیا</h2> </div> <div id="02"> <h2 >سلام بر ایران</h2> </div> <script> var content = document.getElementById("02").innerHTML; document.getElementById("01").innerHTML = content; </script> </body> </html>
جاوا اسکریپت و جر کوئری در استایل دهی و DOM
در این قسمت می خواهیم به بررسی استایل دهی (کد های CSS) با استفاده از کد های جاوا اسکریپت و جی کوئری بپردازیم. لازم به ذکر است که این قسمت، آخرین قسمت از سری آموزشی جاوا اسکریپت پیشرفته می باشد.
مخفی کردن عناصر
در کد زیر می خواهیم یک عنصر را مخفی کنیم. در جی کوئری آن را به این صورت می نویسیم:
<!DOCTYPE html> <html> <head> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.0/jquery.min.js"></script> </head> <body> <h1>Getting Text Content</h1> <h2 id="01">سلام بر دنیا!</h2> <h2 id="02">سلام بر ایران!</h2> <h2 id="03">سلام بر تهران!</h2> <p id="demo"></p> <script> $(document).ready(function() { var myElement = $("#02"); myElement.hide(); }); </script> </body> </html>
اگر بخواهیم همین کار را در جاوا اسکریپت خالی انجام دهیم می گوییم:
<!DOCTYPE html> <html> <body> <h1>Hiding HTML Elements</h1> <h2 id="01">سلام بر دنیا!</h2> <h2 id="02">سلام بر ایران!</h2> <h2 id="03">سلام بر تهران!</h2> <script> document.getElementById("02").style.display = "none"; </script> </body> </html>
نمایش عناصر مخفی شده
پس از مخفی کردن یک عنصر می توانیم آن را به صورت زیر در جی کوئری بازگردانیم:
<!DOCTYPE html> <html> <head> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.0/jquery.min.js"></script> </head> <body> <h1>Showing HTML Elements</h1> <h2 id="01" style="display:none">سلام بر دنیا</h2> <h2 id="02" style="display:none">سلام بر ایران</h2> <h2 id="03" style="display:none">سلام بر تهران</h2> <script> $(document).ready(function() { var myElement = $("#02"); myElement.show(); }); </script> </body> </html>
اگر بخواهیم همین کار را در جاوا اسکریپت ساده انجام دهیم می گوییم:
<!DOCTYPE html> <html> <body> <h1>Showing HTML Elements</h1> <h2 id="01" style="display:none">سلام بر دنیا</h2> <h2 id="02" style="display:none">سلام بر ایران</h2> <h2 id="03" style="display:none">سلام بر تهران</h2> <script> var myElement = document.getElementById("02"); myElement.style.display = ""; </script> </body> </html>
اضافه کردن استایل به عناصر
ما می توانیم در جاوا اسکریپت استایل های CSS را به صورت inline به عناصر HTML اضافه کنیم. این کار در جی کوئری به صورت زیر انجام می شود:
<!DOCTYPE html> <html> <head> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.0/jquery.min.js"></script> </head> <body> <p id="demo">JavaScript can change the style of an HTML element.</p> <script> $(document).ready(function() { var myElement = $("#demo"); myElement.css("font-size","35px"); }); </script> </body> </html>
اما اگر بخواهیم آن را در جاوا اسکریپت ساده بنویسیم می گوییم:
<!DOCTYPE html> <html> <body> <p id="demo">JavaScript can change the style of an HTML element.</p> <script> var myElement = document.getElementById("demo"); myElement.style.fontSize = "35px"; </script> </body> </html>
حذف عناصر از HTML
برای حذف عناصر HTML می توانیم کد زیر را با جی کوئری بنویسیم:
<!DOCTYPE html> <html> <head> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.0/jquery.min.js"></script> </head> <body> <h2>Remove an HTML Element</h2> <h2 id="id01">سلام بر دنیا</h2> <h2 id="id02">سلام بر ایران</h2> <script> $(document).ready(function() { $("#id02").remove(); }); </script> </body> </html>
این کار با استفاده از جاوا اسکریپت خالی و ساده به صورت زیر انجام می شود:
<!DOCTYPE html> <html> <body> <h2>Remove an HTML Element</h2> <h2 id="id01">سلام بر دنیا</h2> <h2 id="id02">سلام بر ایران</h2> <script> var element = document.getElementById("id01"); element.parentNode.removeChild(element); </script> </body> </html>
دریافت عنصر پدر
برای دریافت عنصر پدر (مثلا قرار دادن آن در یک متغیر) در جی کوئری می نویسیم:
<!DOCTYPE html> <html> <head> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.0/jquery.min.js"></script> </head> <body> <h1>Getting Parent HTML Element</h1> <h2 id="01">سلام بر دنیا!</h2> <h2 id="02">سلام بر ایران!</h2> <h2 id="03">سلام بر تهران!</h2> <p id="demo"></p> <script> $(document).ready(function() { var myParent = $("#02").parent(); $("#demo").text(myParent.prop("nodeName")); }); </script> </body> </html>
همین کار به صورت زیر در جاوا اسکریپت ساده انجام می شود:
<!DOCTYPE html> <html> <body> <h1>Getting Parent HTML Element</h1> <h2 id="01">سلام بر دنیا</h2> <h2 id="02">سلام بر ایران</h2> <h2 id="03">سلام بر تهران</h2> <p id="demo"></p> <script> var myParent = document.getElementById("02").parentNode; document.getElementById("demo").innerHTML = myParent.nodeName; </script> </body> </html>
جاوا اسکریپت و جر کوئری در دستورات AJAX
همانطور که دیدید کد های بالا آنچنان هم ساده تر کد های ساده ی جاوا اسکریپت نبودند! در قدیم این مسئله صحیح بود که جی کوئری بسیار قوی تر از جاوا اسکریپت ساده است اما در دوره ی ما جاوا اسکریپت بسیار قوی شده است. تنها مسئله ای که می ماند، زحمت اضافی استفاده از جاوا اسکریپت است که می توان گفت دلیل اصلی استفاده ی توسعه دهندگان از کتابخانه ی جی کوئری نیز همین است. زمانی که بحث جی کوئری و AJAX می شود اکثر طرفداران جی کوئری به سراغ بحث ساده تر بودن درخواست های AJAX در کتابخانه ی جی کوئری می روند بنابراین قصد داریم آن را با (به صورت ساده) جاوا اسکریپت خالص مقایسه کنیم.
یک درخواست AJAX به زبان جی کوئری به این شکل است:
$.ajax({ type: 'GET', url: '/my/url', success: function(resp) { }, error: function() { } });
البته می تواند بر اساس نیاز و شرایط کمی تغییر کند.
این درخواست در جاوا اسکریپت ساده به این شکل است:
var request = new XMLHttpRequest(); request.open('GET', '/my/url', true); request.onload = function() { if (request.status >= 200 && request.status < 400) { // Success! var resp = request.responseText; } else { // We reached our target server, but it returned an error } }; request.onerror = function() { // There was a connection error of some sort }; request.send();
نکته: این کد فقط در Internet Explorer 9 به بعد کار می کند. البته در حقیقت نباید در سایت خود برای IE8 و قبل تر نیز پشتیبانی ایجاد کنید. این تفکر پشتیبانی از IE8 و IE7 بسیار تفکر اشتباهی است بلکه مکررا از سوی توسعه دهندگان گوگل و متخصصان این زمینه توصیه شده است که سعی نکنید برای تکنولوژی های بسیار بسیار قدیمی پشتیبانی ایجاد کنید. به طور مثال آقای کریس جکسون رئیس بخش امنیت مایکروسافت از کاربران میخواهد که تنها در مواردی که هیچ چارهای نیست از IE استفاده کنند. او بر این عقیده است که نقش اینترنت اکسپلورر به مرور زمان تغییر کرده و دیگر نمیتوان آن را یک مرورگر دانست (بلکه تنها ابزاری برای همخوانی با برخی وبسایتهای قدیمی است) و افراد عادی و توسعه دهندگان نباید از آن استفاده کنند.
به هر حال امیدوارم از این دوره ی آموزشی لذت برده باشید. حالا که دوره ی برنامه نویسی پیشرفته جاوا اسکریپت را به اتمام رسانده اید مطمن باشید که به سطح بسیار خوبی در زمینه ی جاوا اسکریپت رسیده و باید به دنبال چالش هایی در سطوح بسیار بالاتر باشید. امیدوارم در هر زمینه ای که هستید موفق باشید.