تعديل HTML
ورقة العبّارة الموجودة في الصفحة تسمّي القارب Gull، والوقت 09:10، والملاحظة Boarding. تعديل HTML يعني أن تكتب محتوى جديدًا داخل عنصر تمسكه أصلًا. boat.textContent = "Heron" يخزّن الكلمات Heron كما هي. note.textContent = "<em>Late</em>" يُظهر هذه المحارف، وnote.querySelector("em") يساوي null. note.innerHTML = "<em>Late</em>" يبني عنصر em نصه Late. بعد ذلك note.textContent هو Late، بينما note.innerHTML ما زال يحمل الوسوم. كتابة ثانية، note.innerHTML = "Dock 2"، تحذف em. note.insertAdjacentHTML("beforeend", " <span>gate B</span>") تبقي Dock 2 وتضيف gate B، فتصير الملاحظة Dock 2 gate B. لا شيء يسند قيمة للوقت، فيبقى 09:10.
كتابة، لا بحث جديد
الصفحة السابقة قارنت طرق العثور على عقدة. هذه الصفحة لا تعدّ مجموعة، ولا تقرأ فهرسًا، ولا تسير عبر 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 محل em، ثم يكتب سطرًا من اسم القارب وتلك الكلمة المحفوظة والملاحظة بعد إضافة 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 وتوقّع أن em يساوي null
- أضف span عبر beforeend وتوقّع Dock 2 gate B ثم نص span وهو gate B
- اقرأ السطر وتوقّع Heron / Late / Dock 2 gate B، واقرأ الوقت وتوقّع 09:10
زلّات هذه الورقة
الصفحة تظل تفتح. الإسناد كتب نوع القيمة الخطأ.
- وضع اسم كُتب عند النافذة في
innerHTML، حيث يصير<وسمًا - توقع أن
textContent = "<em>Late</em>"ينشئ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- يبقى الوقت 09:10 لأن لا شيء يسند إليه
- يقرأ السطر Heron / Late / Dock 2 gate B
🧠 اختبر معرفتك
اختبر معرفتك
تحدى نفسك مع هذا الاختبار التفاعلي واكتشف مدى فهمك للموضوع
📝 التعليمات
- اقرأ كل سؤال بعناية
- اختر أفضل إجابة لكل سؤال
- يمكنك إعادة الاختبار عدة مرات كما تريد
- سيتم عرض تقدمك في الأعلى