آمادهشدن DOM
callback پس از آمادهشدن ساختار DOM اجرا میشود؛ برای برنامههای جدید، زمان بارگذاری script و نیاز به jQuery را هم ارزیابی کنید.
$(function () { const $menu = $("#main-menu"); $menu.addClass("is-ready");});
مرجع عملی jQuery برای انتخاب و پیمایش DOM، مدیریت رویداد، تغییر رابط، فرم، درخواست Ajax و افکتها. jQuery یک مجموعه از عناصر DOM را میسازد تا پیمایش، رویداد و تغییر رابط را ساده کند. کتابخانه را با نسخهٔ پشتیبانیشده بارگذاری کنید و selector را تا حد ممکن دقیق و محدود به ناحیهٔ موردنیاز نگه دارید. رویدادها را با on ثبت کنید و برای عناصری که بعداً به DOM اضافه میشوند، delegation را روی والد پایدار انجام دهید. currentTarget عنصری است که handler روی آن اجرا میشود؛ target میتواند فرزند داخلی باشد. از این صفحه بهعنوان مرجع سریع استفاده کنید و مثالها و نکتهها را با نسخهٔ ابزار، نیاز و شرایط واقعی پروژهٔ خود تطبیق دهید.
callback پس از آمادهشدن ساختار DOM اجرا میشود؛ برای برنامههای جدید، زمان بارگذاری script و نیاز به jQuery را هم ارزیابی کنید.
$(function () { const $menu = $("#main-menu"); $menu.addClass("is-ready");});از # برای id، نقطه برای class و براکت برای selector ویژگی استفاده کنید.
const $form = $("#signup-form");const $cards = $(".product-card");const $externalLinks = $('a[target="_blank"]');children فرزندان مستقیم و find همهٔ نسلهای پایینتر را مییابد.
const $items = $("#menu").children("li");const $links = $("#menu").find("a");برای محدودکردن مجموعه از first، eq، filter و not استفاده کنید؛ زنجیره را خوانا نگه دارید.
const $visibleCard = $(".card") .filter(":visible") .first();const $otherItems = $("#list li").not(".selected");closest نزدیکترین والد منطبق و next/prev همسایهٔ بعدی یا قبلی را پیدا میکنند.
const $card = $(event.target).closest(".card");const $next = $card.next(".card");const $container = $card.closest(".card-list");on یک یا چند handler را به رویدادهای انتخابی متصل میکند.
$("#menu-button").on("click", function () { $("#menu").toggleClass("is-open");});$("#search").on("keyup", function (event) { console.log(event.currentTarget.value);});handler روی والد پایدار ثبت میشود و رویداد فرزندهای بعداً ساختهشده را هم میگیرد.
$("#todo-list").on("click", ".remove-button", function (event) { $(event.currentTarget).closest("li").remove();});برای جلوگیری از ارسال فرم یا پیمایش لینک، preventDefault را صریح و فقط در حالت لازم صدا بزنید.
$("#signup-form").on("submit", function (event) { event.preventDefault(); // اعتبارسنجی و ارسال فرم});برای پاکسازی قابل پیشبینی، handlerهای نامگذاریشده و namespace رویداد بهکار ببرید.
function handleResize() { // بهروزرسانی رابط}$(window).on("resize.dashboard", handleResize);$(window).off("resize.dashboard", handleResize);text محتوای متنی را میخواند یا جایگزین میکند، بدون آنکه رشته را HTML اجرا کند.
const label = $("#status").text();$("#status").text("Saved");val مقدار control را میخواند یا تغییر میدهد؛ برای گروه checkbox و select چندگانه، نوع مقدار را بررسی کنید.
const email = $("#email").val();$("#email").val("person@example.com");const $topics = $('input[name="topic"]:checked').map(function () { return this.value;}).get();برای درج محتوا، دادهٔ بیرونی را بهعنوان متن درج کنید یا عناصر را با API امن بسازید.
const $item = $("<li>").text(userSuppliedTitle);$("#results").append($item);$("#notice").prepend($("<strong>").text("Notice: "));classها را برای state ظاهری مدیریت کنید؛ مقدارهای data- را با .data و attributeهای واقعی را با attr بخوانید.
$("#panel").toggleClass("is-open");$("#submit").prop("disabled", true);const itemId = $("#row-1").data("item-id");$("#external-link").attr("rel", "noreferrer");برای کنترلهای ساده show/hide را بهکار ببرید؛ remove عنصر را از DOM برمیدارد و handlerهای وابسته را هم پاک میکند.
$("#loading").show();$("#loading").hide();$("#obsolete-message").remove();getJSON پاسخ JSON را parse میکند؛ ردشدن درخواست را با fail یا Promise-like API مدیریت کنید.
$.getJSON("/api/products") .done((products) => { console.log(products); }) .fail((jqXHR, textStatus) => { console.error("Request failed:", textStatus); });method، contentType و dataType را با قرارداد API هماهنگ کنید و وضعیت پاسخ ناموفق را نمایش دهید.
$.ajax({ url: "/api/profile", method: "PATCH", contentType: "application/json", dataType: "json", data: JSON.stringify({ displayName: "Nina" })}) .done((profile) => console.log(profile)) .fail((jqXHR) => console.error("Unable to save profile", jqXHR.status));در شروع و پایان درخواست وضعیت رابط را تغییر دهید و برای درخواستهای قابل لغو از jqXHR.abort استفاده کنید.
const request = $.getJSON("/api/search", { q: query }) .always(() => $("#search-status").text(""));$("#search-status").text("Loading…");// اگر دیگر نیازی به پاسخ نیست:request.abort();fadeIn و fadeOut عنصر را با مدت مشخص نمایان یا محو میکنند.
$("#notice").fadeIn(150);$("#notice").fadeOut(150);برای ظاهر پایدار، transition را در CSS تعریف کنید و class حالت را از jQuery تغییر دهید.
$("#drawer") .addClass("is-open") .attr("aria-hidden", "false");میتوان چند handler را زنجیره کرد؛ برای کنترلهای تعاملی، hover را با keyboard و focus نیز پوشش دهید.
$("#menu-button") .on("mouseenter", () => $("#menu").show()) .on("mouseleave", () => $("#menu").hide());برای DOM آماده از $(function () {}) و برای انتخاب عناصر از selector روشن استفاده کنید.
برای رویدادهای عناصر پویا delegation را با on روی والد پایدار انجام دهید.
برای متن نامطمئن از text() استفاده کنید و از قرار دادن مستقیم ورودی در html() بپرهیزید.
در درخواست Ajax خطای شبکه و پاسخ HTTP ناموفق را نیز مدیریت کنید.
برای APIهای جدید، jQuery را فقط در صورت نیاز پروژه نگه دارید و امکان استفاده از APIهای native را بسنجید.
برای ورودی کاربر از .text() یا APIهای ساخت node استفاده کنید؛ قراردادن رشتهٔ نامطمئن در .html() میتواند XSS ایجاد کند.
برای عنصرهایی که بعداً به DOM اضافه میشوند، event delegation را روی container پایدار انجام دهید و handlerهای دیگر را با namespace پاکسازی کنید.