تغییر HTML از JavaScript
روی برگهٔ اسکله، پیش از هر دستکاری، اسم قایق Gull است، ساعت ۰۹:۱۰، و یادداشت میگوید Boarding. تغییر HTML یعنی محتوای همان عنصر را عوض کنی، نه اینکه دوباره دنبالش بگردی. با boat.textContent = "Heron" فقط واژههای Heron مینشیند. اگر یادداشت را با textContent برابر رشتهٔ <em>Late</em> بگذاری، همان نویسهها دیده میشوند و querySelector("em") مقدار null میدهد. innerHTML همان رشته را به یک عنصر em تبدیل میکند که متنش Late است. از آن به بعد textContent فقط Late را برمیگرداند، ولی innerHTML هنوز برچسب را داخل رشته دارد. نوشتن دوبارهٔ innerHTML با مقدار Dock 2 آن em را برمیدارد. insertAdjacentHTML("beforeend", " <span>gate B</span>") عبارت Dock 2 را نگه میدارد و gate B را به ته یادداشت اضافه میکند. به ساعت هیچ مقداری داده نمیشود، پس ۰۹:۱۰ سر جایش میماند.
نوشتن، نه یک جستوجوی تازه
صفحهٔ قبل راههای پیدا کردن گره را کنار هم گذاشت. اینجا نه طول یک فهرست را میخوانی، نه خانهٔ یک لیست را، نه parentElement را. getElementById فقط برگه را به دستت میدهد. اصل درس مقداری است که داخل عنصر مینویسی.
هر نوشتن چه چیزی روی یادداشت میگذارد
یادداشت از Boarding شروع میشود. ردیفها را به ترتیب بخوان. هر مقدار یا جای قبلی را میگیرد یا به تهش اضافه میشود.
📊 هر نوشتن چه چیزی روی یادداشت میگذارد
| نوشتن | چه میبینی | چه میماند | لغزش رایج |
|---|---|---|---|
textContent = "Heron" روی قایق |
Heron | یک گرهٔ متن | عنصری که اسمش Heron باشد |
textContent = "<em>Late</em>" |
نویسههای <em>Late</em> |
هیچ عنصر em |
یک em واقعی |
innerHTML = "<em>Late</em>" |
Late | یک em |
انتظار برچسب داخل textContent |
innerHTML = "Dock 2" |
Dock 2 | em رفته |
ماندن em کنار Dock 2 |
insertAdjacentHTML("beforeend", " <span>gate B</span>") |
Dock 2 gate B | Dock 2 بهعلاوه یک span |
innerHTML که Dock 2 را پاک میکند |
textContent رشته را ذخیره میکند و برچسب را تفسیر نمیکند. innerHTML برچسب را میسازد و هر فرزندی که عنصر از قبل داشت دور میریزد. insertAdjacentHTML هم برچسب را میسازد، ولی beforeend گرههای تازه را بعد از محتوای فعلی میگذارد. اسم قایقی که پشت پنجره تایپ میشود جایش در textContent است. همان رشته اگر به innerHTML برود، علامت کوچکتر از را برچسب حساب میکند.
اول برگه را بخوان
فایل با سه مقدار باز میشود. هنوز هیچ مقداری نسبت داده نشده.
console.log(document.getElementById("boat").textContent);
console.log(document.getElementById("when").textContent);
console.log(document.getElementById("note").textContent);
خروجیها Gull و 09:10 و Boarding است. ساعت پاراگراف جداست. نوشتنهای بعدی به when دست نمیزنند.
واژه، واژه میماند
textContent همهٔ فرزندها را با یک گرهٔ متن عوض میکند. نویسههایی که شکل برچسب دارند همان نویسنده میمانند.
let boat = document.getElementById("boat");
let note = document.getElementById("note");
boat.textContent = "Heron";
note.textContent = "<em>Late</em>";
console.log(boat.textContent);
console.log(note.textContent);
console.log(note.querySelector("em"));
خط اول Heron است. خط دوم خود نویسههای <em>Late</em> است. خط سوم null است. یادداشت برچسب را مثل متن نشان میدهد و عنصری نساخته.
innerHTML عنصر را میسازد
همان نویسهها را به innerHTML بده. تجزیهگر رشته را به گره تبدیل میکند و هر چه داخل یادداشت بود جایش را میگیرد.
let note = document.getElementById("note");
note.innerHTML = "<em>Late</em>";
console.log(note.textContent);
console.log(note.innerHTML);
console.log(note.querySelector("em") === null);
خط اول Late است. خط دوم <em>Late</em> است، چون innerHTML خود نشانهگذاری را برمیگرداند، با برچسب. خط سوم false است: em وجود دارد و null نیست. واژهٔ دیدهشده و رشتهٔ برچسب دو خواندن از یک عنصرند.
innerHTML بعدی همان em را برمیدارد
مقدار تازهٔ innerHTML کل یادداشت را عوض میکند. em کنار متن جدید نمیماند.
let note = document.getElementById("note");
note.innerHTML = "Dock 2";
console.log(note.textContent);
console.log(note.querySelector("em"));
خط اول Dock 2 است. خط دوم null است. Boarding از نوشتن قبلی رفته بود. این نوشتن em را هم میبرد.
gate B را اضافه کن و Dock 2 بماند
insertAdjacentHTML("beforeend", ...) یک قطعه را تجزیه میکند و ته عنصر میگذارد. این رشته با یک فاصله شروع میشود تا دو عبارت به هم نچسبند. جایگاههای دیگر هم هست. این صفحه فقط beforeend را به کار میبرد.
let note = document.getElementById("note");
note.insertAdjacentHTML("beforeend", " <span>gate B</span>");
console.log(note.textContent);
console.log(note.querySelector("span").textContent);
خط اول Dock 2 gate B است. خط دوم gate B است. Dock 2 هنوز داخل یادداشت است. اگر همان رشتهٔ span را با innerHTML بگذاری، Dock 2 پاک میشود.
یک خط زیر برگه
اسکریپت ته body است، بعد از اینکه برگه در صفحه هست. واژهٔ Late را پیش از جایگزینی با Dock 2 نگه میدارد، بعد یک خط میسازد از اسم قایق، همان واژهٔ ذخیرهشده، و یادداشت بعد از اضافه شدن gate B.
<!DOCTYPE html>
<html>
<head>
<title>changing html — page</title>
</head>
<body>
<article id="slip">
<h2 id="boat">Gull</h2>
<p id="when">09:10</p>
<p id="note">Boarding</p>
<p id="line">…</p>
</article>
<script>
let boat = document.getElementById("boat");
let note = document.getElementById("note");
boat.textContent = "Heron";
note.innerHTML = "<em>Late</em>";
let late = note.textContent;
note.innerHTML = "Dock 2";
note.insertAdjacentHTML("beforeend", " <span>gate B</span>");
document.getElementById("line").textContent = boat.textContent + " / " + late + " / " + note.textContent;
</script>
</body>
</html>
خط صفحه میشود Heron / Late / Dock 2 gate B. ساعت هنوز 09:10 است. Late روی این خط همان واژهای است که پیش از پاک شدن ذخیره شد. خود یادداشت دیگر Late نمیگوید. صفحهٔ بعد استایل CSS همین جور عنصرها را عوض میکند و راه تازهای برای پیدا کردنشان نمیآورد.
برگه را چک کن
- سه متن شروع را بنویس و Gull و 09:10 و Boarding را انتظار داشته باش
- قایق را Heron کن و یادداشت را برابر نویسههای em بگذار؛ همان رشته و یک em برابر null را انتظار داشته باش
- innerHTML را برابر رشتهٔ em بگذار؛ textContent برابر Late، خود innerHTML هنوز با برچسب، و em که null نیست
- innerHTML را Dock 2 بگذار و انتظار null برای em
- span را با beforeend اضافه کن؛ Dock 2 gate B و بعد متن span یعنی gate B
- خط را بخوان: Heron / Late / Dock 2 gate B؛ ساعت را بخوان: 09:10
لغزشهای همین برگه
صفحه باز میشود. نوع مقداری که نوشتی غلط بوده.
- اسم تایپشده پشت پنجره را ریختن در
innerHTML، جایی که<برچسب میشود - انتظار ساختن
emازtextContent = "<em>Late</em>" - خواندن
textContentبعد از ساخت em و انتظار دیدن برچسب در آن رشته innerHTMLدوباره و انتظار ماندنem- اضافه کردن gate B با
innerHTMLو از دست رفتن Dock 2 - حذف فاصلهٔ اول رشته، طوری که یادداشت بشود
Dock 2gate B - گذاشتن
styleدر این صفحه؛ صفحهٔ بعد CSS را عوض میکند - صدازدن
createElementاینجا؛ صفحهٔ دیگری گرهٔ تازه میسازد
اینها را با خودت ببر
textContentمتن ساده مینویسد و برچسب را تجزیه نمیکندinnerHTMLبرچسب را میسازد و همهٔ فرزندها را عوض میکند- بعد از نوشتن em،
textContentبرابر Late است وinnerHTMLهنوز برچسب دارد innerHTMLدوم،emرا حذف میکندinsertAdjacentHTML("beforeend", ...)نشانهگذاری اضافه میکند و Dock 2 میماند- ساعت ۰۹:۱۰ میماند چون هیچ مقداری به آن داده نمیشود
- خط صفحه میشود Heron / Late / Dock 2 gate B
🧠 دانش خود را بیازمایید
دانش خود را بیازمایید
خود را با این آزمون تعاملی به چالش بکشید و ببینید موضوع را چقدر خوب درک کردهاید
📝 دستورالعملها
- هر سوال را با دقت بخوانید
- بهترین پاسخ را برای هر سوال انتخاب کنید
- میتوانید آزمون را هر چند بار که میخواهید تکرار کنید
- پیشرفت شما در بالا نمایش داده میشود