وب Dev Day 7: راهنمای JavaScript قسمت 2

DOM در جاوا اسکریپت چیست؟
در مدل شیء سند (DOM) است رابط برنامه نویسی که به JavaScript اجازه می دهد تعامل ، دستکاری و به روزرسانی صفحات وب به صورت پویابشر
این نمایانگر یک سند HTML به عنوان یک ساختار درخت، جایی که هر کدام عنصر HTML یک گره استبشر
1. درک ساختار DOM
این را در نظر بگیرید سند HTML:
DOM Example
This is a paragraph.
چگونه DOM این صفحه را نشان می دهد:
Document
├── html
│ ├── head
│ │ ├── title
│ ├── body
│ ├── h1 (id="heading")
│ ├── p (class="text")
2. دسترسی به DOM با استفاده از JavaScript
انتخاب عناصر توسط شناسه (getElementById)
let heading = document.getElementById("heading");
console.log(heading.textContent);
// Output: "Hello, DOM!"
انتخاب عناصر توسط کلاس (getElementsByClassName
let paragraphs = document.getElementsByClassName("text");
console.log(paragraphs[0].textContent);
// Output: "This is a paragraph."
انتخاب عناصر با نام برچسب (getElementsByTagName)
let allHeadings = document.getElementsByTagName("h1");
console.log(allHeadings[0].textContent);
// Output: "Hello, DOM!"
روش مدرن: با استفاده از queryselector و queryselectorall
let heading = document.querySelector("#heading"); // Selects by ID
let paragraph = document.querySelector(".text"); // Selects first element with class
let allParagraphs = document.querySelectorAll(".text"); // Selects all elements with class
console.log(heading.textContent);
// Output: "Hello, DOM!"
3. اصلاح DOM (تغییر محتوا)
تغییر HTML داخلی
document.getElementById("heading").innerHTML = "Hello, JS!";
تغییر محتوای متن
document.getElementById("heading").textContent = "Hello, JavaScript!";
4. دستکاری عناصر DOM
اضافه کردن یک عنصر جدید (CreateElement & AppendChild)
let newPara = document.createElement("p");
newPara.textContent = "This is a new paragraph!";
document.body.appendChild(newPara);
حذف یک عنصر (removeechild)
let element = document.getElementById("heading");
element.parentNode.removeChild(element);
تغییر سبک های CSS با استفاده از JavaScript
document.getElementById("heading").style.color = "blue";
5. رسیدگی به رویدادها در DOM
اضافه کردن یک شنونده رویداد
document.getElementById("heading").addEventListener("click", function() {
alert("Heading clicked!");
});
حذف یک شنونده رویداد
function greet() {
console.log("Heading clicked!");
}
let heading = document.getElementById("heading");
heading.addEventListener("click", greet);
heading.removeEventListener("click", greet);
دستکاری ویژگی ها در JavaScript (DOM)
JavaScript فراهم می کند روش به اضافه کردن ، اصلاح و حذف ویژگی های عناصر HTML به صورت پویا.
1. دسترسی به ویژگی ها
getAttribute()
مقدار یک ویژگی را دریافت می کند.
let link = document.querySelector("a");
console.log(link.getAttribute("href"));
// Output: The URL inside the `href` attribute
setAttribute()
یک ویژگی را تنظیم یا به روز می کند.
let link = document.querySelector("a");
link.setAttribute("href", "https://example.com");
console.log(link.getAttribute("href"));
// Output: "https://example.com"
hasAttribute()
بررسی می کند که آیا یک عنصر دارای یک ویژگی خاص است.
let button = document.querySelector("button");
if (button.hasAttribute("disabled")) {
console.log("Button is disabled");
} else {
console.log("Button is enabled");
}
removeAttribute()
یک ویژگی را از یک عنصر حذف می کند.
let input = document.querySelector("input");
input.removeAttribute("disabled");
2. کار با ویژگی های کلاس
classList.add()
یک کلاس را به یک عنصر اضافه می کند.
let box = document.querySelector(".box");
box.classList.add("active");
classList.remove()
کلاس را حذف می کند.
box.classList.remove("active");
classList.toggle()
یک کلاس روشن/خاموش را تغییر می دهد.
box.classList.toggle("hidden");
classList.contains()
اگر یک عنصر دارای کلاس باشد ، بررسی می کند.
console.log(box.classList.contains("hidden"));
// Output: true or false
3. کار با داده ها-* ویژگی ها
ویژگی های سفارشی (داده-*) داده های اضافی را در عناصر ذخیره می کنند.
دریافت داده-* ویژگی ها
let button = document.querySelector("button");
console.log(button.getAttribute("data-user-id"));
// Output: User ID stored in `data-user-id`
استفاده از مجموعه داده برای دسترسی آسان تر
console.log(button.dataset.userId);
// Output: User ID stored in `data-user-id`
تنظیم داده ها-* ویژگی ها
button.dataset.status = "active";
console.log(button.dataset.status);
// Output: "active"
4. فعال کردن/غیرفعال کردن عناصر (ویژگی غیرفعال)
let button = document.querySelector("button");
// Disable the button
button.setAttribute("disabled", true);
// Enable the button
button.removeAttribute("disabled");
دستکاری سبک ها در JavaScript (DOM)
JavaScript به شما امکان می دهد پویا سبک CSS را تغییر دهید در عناصر HTML با استفاده از style
دارایی یا کلاسهای CSSبشر
1. تغییر سبک های درون خطی
می توانید اصلاح کنید خواص CSS با استفاده از .style
خاصیت
let box = document.querySelector(".box");
box.style.backgroundColor = "blue";
box.style.color = "white";
box.style.padding = "20px";
2. اصلاح چند سبک با استفاده از csStext
box.style.cssText = "background: red; color: white; padding: 15px;";
3. استفاده از لیست کلاس برای دستکاری CSS
به جای اصلاح مستقیم سبک ها ، از کلاس های CSS برای کنترل بهتر استفاده کنید.
اضافه کردن کلاس
box.classList.add("highlight");
حذف یک کلاس
box.classList.remove("highlight");
جابجایی یک کلاس (روشن/خاموش)
box.classList.toggle("hidden");
بررسی اینکه آیا یک عنصر دارای کلاس است
console.log(box.classList.contains("hidden"));
// Output: true or false
پیمایش در صفحه با استفاده از JavaScript (DOM Navigation)
JavaScript انواع مختلفی را ارائه می دهد روشهای ناوبری DOM حرکت بین عناصر در صفحه وببشر
دسترسی به عناصر والدین ، فرزند و خواهر و برادر
گرفتن عنصر والدین (parentNode
واد parentElement
)
let child = document.querySelector(".child");
console.log(child.parentNode);
console.log(child.parentElement);
Feature Method
Get Parent Element parentNode, parentElement
Get Child Elements firstElementChild, lastElementChild
Get Sibling Elements nextElementSibling, previousElementSibling
Scroll to Section scrollIntoView()
Redirect to URL window.location.href
Reload Page window.location.reload()
Navigate History window.history.back() / forward()
اضافه کردن عناصر به صفحه با استفاده از JavaScript (دستکاری DOM)
JavaScript به شما امکان می دهد به صورت پویا عناصر را ایجاد و اضافه کنید به صفحه وب با استفاده از DOM APIبشر
1. ایجاد و افزودن یک عنصر
createElement()
با appendChild()
let newPara = document.createElement("p"); // Create element
newPara.textContent = "This is a new paragraph!"; // Add text
document.body.appendChild(newPara); // Append to body
2. اضافه کردن یک عنصر در داخل یک والدین خاص
let parentDiv = document.getElementById("container");
let newDiv = document.createElement("div");
newDiv.textContent = "Hello, this is a new div!";
newDiv.classList.add("new-box");
parentDiv.appendChild(newDiv);
3. با استفاده از insertbefore () (در یک موقعیت خاص درج کنید)
let list = document.getElementById("list");
let newItem = document.createElement("li");
newItem.textContent = "New Item";
let firstItem = list.firstElementChild; // Get first item
list.insertBefore(newItem, firstItem); // Insert before it
Feature Method
Create an Element createElement("tag")
Add Text element.textContent = "Text"
Append to End appendChild(element)
Insert Before insertBefore(newElement, referenceElement)
Insert at Specific Position insertAdjacentHTML(position, html)
Prepend Element prepend(element)
Clone Element cloneNode(true)
حذف عناصر از صفحه با استفاده از JavaScript (دستکاری DOM)
JavaScript به شما امکان می دهد عناصر را بصورت پویا حذف کنید از DOM با استفاده از روشهای مختلف.
حذف یک عنصر با استفاده از remove()
let element = document.getElementById("box");
element.remove();
2. از بین بردن عنصر کودک با استفاده از removeechild ()
let parent = document.getElementById("container");
let child = document.getElementById("child");
parent.removeChild(child);
Feature Method
Remove an element element.remove()
Remove a child parent.removeChild(child)
Remove first/last child firstElementChild.remove() / lastElementChild.remove()
Remove all children innerHTML = ""
Remove using parent parentNode.removeChild(element)
Remove multiple elements querySelectorAll().forEach(el => el.remove())
رویدادهای DOM در جاوا اسکریپت
وقایع DOM به JavaScript اجازه دهید تعامل کاربر مانند کلیک ، فشار کلیدی و حرکات ماوسبشر
1. اضافه کردن یک شنونده رویداد (addEventListener
)
let button = document.getElementById("myButton");
button.addEventListener("click", function() {
console.log("Button clicked!");
});
onclick
وت onmouseenter
وقایع در جاوا اسکریپت
JavaScript فراهم می کند دستگیرندگان رویداد مانند onclick
وت onmouseenter
به تعامل کاربر را تشخیص دهید مانند کلیک و حرکات ماوسبشر
1 onclick
رویداد (کلیک ها را تشخیص می دهد)
در onclick
واقعه هنگامی که یک عنصر است آتش می گیرد کلیک کردبشر
با استفاده از onclick
با HTML (Inline)
استفاده از OnClick در JavaScript (رویکرد بهتر)
let button = document.getElementById("myButton");
button.onclick = function() {
alert("Button clicked!");
};
با استفاده از addeventlistener (“کلیک”) (بهترین تمرین)
let btn = document.getElementById("myButton");
btn.addEventListener("click", () => {
alert("Button clicked using addEventListener!");
});
2. رویداد OnMouseenter (Hover Mouse)
رویداد OnMouseEnter هنگام ورود موش به یک عنصر آتش می گیرد.
مثال: تغییر رنگ پس زمینه در شناور
let box = document.getElementById("box");
box.onmouseenter = function() {
box.style.backgroundColor = "yellow";
};
box.onmouseleave = function() {
box.style.backgroundColor = "white";
};
addEventListener()
در جاوا اسکریپت
در addEventListener()
روش به جاوا اسکریپت اجازه می دهد شنوندگان رویداد را ضمیمه کنید به عناصر HTML به صورت پویا.
این است روش ارجح برای رسیدگی به رویدادها زیرا از آن پشتیبانی می کند چند دستگیرهبشر
نحو اساسی
element.addEventListener("event", function);
شنوندگان رویداد برای عناصر در JavaScript
جاذب شنوندگان رویداد به شما اجازه می دهد تا تشخیص دهید تعامل کاربر روی عناصر مانند دکمه ها ، پیوندها ، ورودی ها و فرم هابشر
1. اضافه کردن یک شنونده رویداد (addEventListener()
)
element.addEventListener("event", function);
this
در رویداد شنوندگان در JavaScript
در this
کلمه کلیدی بر اساس نحوه تعریف عملکرد در شنوندگان متفاوت رفتار می کند.
1 this
در یک عملکرد منظم (به عنصر اشاره دارد)
هنگام استفاده از a عملکرد منظمبا this
اشاره به عنصری که باعث ایجاد این رویداد شدبشر
let button = document.getElementById("myButton");
button.addEventListener("click", function() {
console.log(this); // Logs the button element
this.style.backgroundColor = "blue"; // Changes button color
});
رویدادهای صفحه کلید در JavaScript
جاذب رویدادهای صفحه کلید به شما امکان می دهد وقتی کاربر یک کلید را فشار داده یا آزاد می کند ، تشخیص دهید.
1. انواع رویدادهای صفحه کلید
واقعه | شرح |
---|---|
keydown |
هنگامی که یک کلید است آتش می گیرد فشار |
keyup |
هنگامی که یک کلید است آتش می گیرد عاری از |
keypress |
(مستهلک) شبیه به keydown ، اما تشخیص نمی دهد Shift با Ctrl با Alt ، و غیره |
بهترین تمرین: استفاده کردن keydown
وت keyup
به جای keypress
بشر
2. تشخیص مطبوعات کلید (keydown
)
document.addEventListener("keydown", (event) => {
console.log(`Key pressed: ${event.key}`);
});
در جاوا اسکریپت رویدادهایی را تشکیل می دهند
جاذب وقایع به شما امکان می دهد تعامل کاربر را با عناصر فرم ، مانند فیلدهای ورودی ، کادر چک و دکمه هابشر
1. رویدادهای فرم مشترک
| Event | Description |
|-------|------------|
| `submit` | Fires when a form is submitted |
| `focus` | Fires when an input field gains focus |
| `blur` | Fires when an input field loses focus |
| `change` | Fires when an input value changes (for dropdowns, checkboxes, etc.) |
| `input` | Fires when the user types in an input field |
| `reset` | Fires when the form is reset |
2. از ارسال فرم پیش فرض جلوگیری کنید (submit
رویداد)
let form = document.getElementById("myForm");
form.addEventListener("submit", (event) => {
event.preventDefault(); // Prevent page reload
console.log("Form submitted!");
});
استخراج داده های فرم در JavaScript
JavaScript به شما امکان می دهد مقادیر ورودی فرم را بازیابی کنید برای اعتبار سنجی ، پردازش یا ارسال داده به سرور به صورت پویا.
1. استخراج داده ها با استفاده از querySelector
document.getElementById("myForm").addEventListener("submit", function(event) {
event.preventDefault(); // Prevent page reload
let name = document.querySelector("#name").value;
let email = document.querySelector("#email").value;
let message = document.querySelector("#message").value;
console.log(`Name: ${name}, Email: ${email}, Message: ${message}`);
});
2. استخراج داده ها با استفاده از عناصر[]
document.getElementById("myForm").addEventListener("submit", function(event) {
event.preventDefault();
let form = event.target;
let name = form.elements["name"].value;
let email = form.elements["email"].value;
console.log(`Name: ${name}, Email: ${email}`);
});
3. استخراج کادر انتخاب و مقادیر دکمه رادیویی
document.getElementById("myForm").addEventListener("submit", function(event) {
event.preventDefault();
let agree = document.querySelector("#agree").checked;
let gender = document.querySelector('input[name="gender"]:checked').value;
console.log(`Agreement: ${agree}, Gender: ${gender}`);
});
Feature Method
Get Input Value document.querySelector("#id").value
Get Checkbox Value document.querySelector("#id").checked
Get Selected Radio Value document.querySelector('input[name="name"]:checked').value
Get Dropdown Value document.querySelector("#id").value
Extract All Form Data new FormData(form).entries()
Send Data to Server fetch("URL", { method: "POST", body: formData })
change
رویداد در جاوا اسکریپت
در change
واقعه آتش سوزی هنگام ورودی فرم تمرکز خود را پس از تغییر ارزش از دست می دهدبشر
معمولاً برای کشویی ، کادر چک ، دکمه های رادیویی و ورودی های متنبشر
1. نحو اساسی
element.addEventListener("change", function(event) {
console.log(event.target.value);
});
input
رویداد در جاوا اسکریپت
در input
واقعه آتش سوزی هر زمان که مقدار یک میدان ورودی تغییر کند، آن را برای ایده آل برای به روزرسانی های زندهبشر
1. نحو اساسی
element.addEventListener("input", function(event) {
console.log(event.target.value);
});
حباب رویداد در JavaScript
حباب رویداد مفهومی در DOM است که در آن یک رویداد از عنصر هدف شروع می شود وت به سمت بالا پخش می شود به اجداد آن
1. چگونه حباب رویداد کار می کند
HTML زیر را در نظر بگیرید:
حال ، بیایید شنوندگان رویداد را اضافه کنیم:
document.getElementById("child").addEventListener("click", () => {
console.log("Child clicked!");
});
document.getElementById("parent").addEventListener("click", () => {
console.log("Parent clicked!");
});
با کلیک روی سیاهههای مربوط به دکمه ها:
کودک کلیک کرد!
والدین کلیک کردند!
این رویداد از کودک (دکمه) شروع می شود و حباب تا والدین (DIV).
2. متوقف کردن حباب رویداد (StopPropagation ())
برای جلوگیری از حباب از event.stoppropagation () استفاده کنید:
document.getElementById("child").addEventListener("click", (event) => {
event.stopPropagation();
console.log("Child clicked!");
});
document.getElementById("parent").addEventListener("click", () => {
console.log("Parent clicked!");
});
اکنون با کلیک روی دکمه فقط سیاهههای مربوط:
کودک کلیک کرد!
رویداد والدین شروع نمی شود.
نمایندگی رویداد در جاوا اسکریپت
نمایندگی یک تکنیک در جاوا اسکریپت است که در آن شنونده تک رویداد به یک عنصر والدین اضافه می شود تا حوادث را بر روی چندین عناصر کودک انجام دهد ، حتی اگر به صورت پویا اضافه شوند.
1. چرا از نمایندگی رویداد استفاده می کنید؟
🔹 بدون هیئت رویداد (اضافه کردن شنوندگان رویداد به هر دکمه)
let buttons = document.querySelectorAll(".btn");
buttons.forEach(button => {
button.addEventListener("click", () => {
console.log("Button clicked!");
});
});
برای عناصر اضافه شده پویا کار نمی کند.
2. با استفاده از نمایندگی رویداد
document.getElementById("parent").addEventListener("click", (event) => {
if (event.target.matches(".btn")) {
console.log(`Button Clicked: ${event.target.textContent}`);
}
});
چرا استفاده می شود؟
- فقط یک شنونده رویداد لازم است.
- برای هر دو عناصر موجود و پویا اضافه شده است.