يا هلا والله بالشباب! اليوم بنتكلم عن شغلة أساسية ومهمة في الجافاسكريبت: كيف نضيف ونحذف عناصر من صفحة الويب حقتنا. الموضوع كله يدور حول التعامل مع الـ DOM (Document Object Model)، وهو زي الشجرة اللي تمثل كل شي في صفحتك.
إضافة عناصر جديدة
عشان تضيف عنصر جديد، تحتاج تسوي خطوتين أساسيتين:
- تنشئ العنصر نفسه.
- تلصق العنصر هذا في مكان معين بصفحتك.
1. إنشاء العنصر: document.createElement()
تستخدم الدالة document.createElement() عشان تسوي أي عنصر HTML تبغاه. مثلاً، لو تبغى تسوي فقرة p:
const newParagraph = document.createElement('p');
بعد ما تنشئ العنصر، تقدر تضيف له محتوى نصي أو خصائص (attributes):
newParagraph.textContent = 'هذي فقرة جديدة أضفناها بالجافاسكريبت!';
newParagraph.id = 'myNewParagraph';
newParagraph.classList.add('highlight');
2. إضافة العنصر للصفحة: appendChild() أو insertBefore()
بعد ما جهزت العنصر، لازم تضيفه لواحد من العناصر الموجودة أصلاً في صفحتك (الـ parent element). عندك طريقتين مشهورتين:
parentElement.appendChild(childElement)
هذي الدالة تضيف العنصر الجديد في نهاية العنصر الأب. يعني لو عندك div فيه كذا عنصر، العنصر الجديد بيجي آخر واحد فيهم.
مثال:
<!DOCTYPE html>
<html lang="ar">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>إضافة عناصر</title>
</head>
<body>
<div id="container">
<p>فقرة موجودة أصلاً.</p>
</div>
<script>
// 1. نلقى العنصر الأب اللي بنضيف فيه
const container = document.getElementById('container');
// 2. نسوي عنصر جديد (مثلاً: heading h2)
const newHeading = document.createElement('h2');
newHeading.textContent = 'عنوان جديد تم إضافته!';
newHeading.style.color = '#0056b3';
// 3. نضيف العنوان الجديد لنهاية الـ container
container.appendChild(newHeading);
// نسوي فقرة ثانية ونضيفها
const anotherParagraph = document.createElement('p');
anotherParagraph.textContent = 'وهذي فقرة ثانية بعد.';
container.appendChild(anotherParagraph);
</script>
</body>
</html>
parentElement.insertBefore(newElement, referenceElement)
إذا كنت تبغى تتحكم أكثر في مكان إضافة العنصر، تقدر تستخدم insertBefore(). هذي الدالة تضيف العنصر الجديد قبل عنصر معين موجود أصلاً داخل العنصر الأب.
مثال:
<!DOCTYPE html>
<html lang="ar">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>إضافة عناصر قبل عنصر معين</title>
</head>
<body>
<div id="list-container">
<ul id="myList">
<li>عنصر قائمة 1</li>
<li id="second-item">عنصر قائمة 2 (مرجع)</li>
<li>عنصر قائمة 3</li>
</ul>
</div>
<script>
const myList = document.getElementById('myList');
const secondItem = document.getElementById('second-item');
// نسوي عنصر قائمة جديد
const newItem = document.createElement('li');
newItem.textContent = 'عنصر جديد قبل عنصر 2';
newItem.style.color = 'green';
// نضيف العنصر الجديد قبل الـ "secondItem"
myList.insertBefore(newItem, secondItem);
</script>
</body>
</html>
حذف عناصر موجودة
حذف العناصر أسهل من إضافتها، وعندك طريقتين رئيسيتين:
1. parentElement.removeChild(childElement)
هذي الطريقة القديمة شوي بس شغالة وزي الفل. عشان تحذف عنصر، لازم توصل للعنصر الأب حقه، وبعدين تستخدم removeChild() وتعطيها العنصر اللي تبغى تحذفه.
مثال:
<!DOCTYPE html>
<html lang="ar">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>حذف عناصر</title>
</head>
<body>
<div id="parent-div">
<p>هذي فقرة بنخليها.</p>
<p id="removable-paragraph">هذي الفقرة بنحذفها.</p>
<p>وهذي فقرة ثانية بنخليها.</p>
</div>
<button id="removeBtn">احذف الفقرة</button>
<script>
const parentDiv = document.getElementById('parent-div');
const removableParagraph = document.getElementById('removable-paragraph');
const removeButton = document.getElementById('removeBtn');
removeButton.addEventListener('click', () => {
// نتأكد إن العنصر موجود قبل ما نحاول نحذفه
if (removableParagraph) {
parentDiv.removeChild(removableParagraph);
alert('تم حذف الفقرة بنجاح!');
} else {
alert('الفقرة محذوفة من قبل!');
}
});
</script>
</body>
</html>
2. childElement.remove()
هذي الطريقة الأسهل والأحدث لحذف عنصر، وهي مدعومة في كل المتصفحات الحديثة. كل اللي عليك إنك توصل للعنصر اللي تبغى تحذفه، وتستدعي عليه دالة remove() مباشرة، بدون ما تحتاج توصل للعنصر الأب.
مثال (بنفس المثال اللي فوق بس بطريقة أسهل):
<!DOCTYPE html>
<html lang="ar">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>حذف عناصر بطريقة <code dir="ltr" style="background:#f3f4f6; color:#0056b3; padding:2px 6px; border-radius:4px; font-family:monospace; direction:ltr !important; display:inline-block;">remove()</code></title>
</head>
<body>
<div id="parent-div">
<p>هذي فقرة بنخليها.</p>
<p id="removable-paragraph-modern">هذي الفقرة بنحذفها بالطريقة الحديثة.</p>
<p>وهذي فقرة ثانية بنخليها.</p>
</div>
<button id="removeBtnModern">احذف الفقرة (حديث)</button>
<script>
const removableParagraphModern = document.getElementById('removable-paragraph-modern');
const removeButtonModern = document.getElementById('removeBtnModern');
removeButtonModern.addEventListener('click', () => {
if (removableParagraphModern) {
removableParagraphModern.remove(); // مباشرة على العنصر
alert('تم حذف الفقرة بالطريقة الحديثة بنجاح!');
} else {
alert('الفقرة محذوفة من قبل!');
}
});
</script>
</body>
</html>
ملاحظات سريعة
- تذكر دائمًا إنك تتعامل مع الـ DOM، وهذي العمليات ممكن تكون مكلفة لو سويتها كثير وبشكل غير فعال. حاول تجمع التعديلات مع بعض قبل ما تطبقها على الـ DOM.
- دائمًا تأكد إن العنصر اللي تحاول تضيف فيه أو تحذف منه موجود فعلاً في الصفحة عشان تتجنب الأخطاء.
- الـ
remove() هي الطريقة المفضلة حالياً للحذف لأنها أبسط وأوضح.
وبكذا نكون غطينا أساسيات إضافة وحذف العناصر في الجافاسكريبت. الموضوع بسيط بس يبغاله ممارسة. بالتوفيق!