التنقل بين العناصر
مفهوم التنقل بين العناصر
التنقل بين عناصر الصفحة (DOM Navigation) يقصد به القدرة على الوصول المباشر إلى العناصر القريبة من العنصر الحالي.
أي عنصر موجود في الصفحة يملك خصائص تجعله قادر على الوصول إلى العناصر الأخرى الموجودة بالقرب منه مما يعني أنك تستطيع الإنتقال إلى العناصر الموجودة بجانبه و التي تعتبر شقيقة له (Siblings Elements)، النزول إلى العناصر الموجودة بداخله و التي تعتبر أبناء له (Children Elements)، و حتى الصعود إلى العنصر الذي هو موجود فيه و الذي يعتبر بمثابة أب له (Parent Element).
أي وسم موجود في DOM يسمى عنصر ( Element ) أو عقدة ( Node ) و هذا معناها ما يلي:
- سواء قلت Parent Element أو Parent Node فالمقصود هو العنصر الأب.
- سواء قلت Child Element أو Child Node فالمقصود هو العنصر الإبن.
- سواء قلت Sibling Element أو Sibling Node فالمقصود هو العنصر الشقيق.
الوصول للعنصر الأب
يمكنك استخدام الخاصية
العنصر الأب الذي تصل له يمكنك تخزينه في متغير أو التعامل معه بشكل مباشر.
في المثال التالي قمنا بإظهار حدود للعنصر الذي يُعتبر بمثابة أب للعنصر الذي يملك id يساوي
مثال
<!DOCTYPE html>
<html>
<body>
<h1>JS Move To Parent Element</h1>
<p>You can use the "parentNode" property to move up the parent element.</p>
<!-- العنصر التالي هو العنصر الأب الذي أظهرنا له حدود -->
<div>
<p id="demo">This is a paragraph.</p>
<p>This is another paragraph.</p>
</div>
<script>
// element في متغير إسمه demo يساوي id هنا قمنا بتخزين العنصر الذي يملك
var element = document.getElementById('demo');
// و أظهرنا له حدود element هنا قمنا بالصعود للعنصر الأب للعنصر الذي يمثله المتغير
element.parentNode.style.border = '2px solid red';
</script>
</body>
</html>
الوصول للعنصر الشقيق التالي
يمكنك استخدام الخاصية
العنصر التالي الذي تصل له يمكنك تخزينه في متغير أو التعامل معه بشكل مباشر.
في المثال التالي قمنا بإظهار حدود للعنصر التالي الموجود بعد العنصر الذي يملك id يساوي
مثال
<!DOCTYPE html>
<html>
<body>
<h1>JS Move To Next Element</h1>
<p>You can use the "nextElementSibling" property to move to the next element.</p>
<div>
<p>This is a paragraph.</p>
<p id="demo">This is a paragraph.</p>
<p>This is a paragraph.</p> <!-- هذا هو العنصر الذي أظهرنا له حدود -->
</div>
<script>
// element في متغير إسمه demo يساوي id هنا قمنا بتخزين العنصر الذي يملك
var element = document.getElementById('demo');
// و أظهرنا له حدود element هنا قمنا بالإنتقال للعنصر التالي الموجود بعد العنصر الذي يمثله المتغير
element.nextElementSibling.style.border = '2px solid red';
</script>
</body>
</html>
الوصول للعنصر الشقيق السابق
يمكنك استخدام الخاصية
العنصر السابق تصل له يمكنك تخزينه في متغير أو التعامل معه بشكل مباشر.
في المثال التالي قمنا بإظهار حدود للعنصر السابق الموجود قبل العنصر الذي يملك id يساوي
مثال
<!DOCTYPE html>
<html>
<body>
<h1>JS Move To Next Element</h1>
<p>You can use the "previousElementSibling" property to move to the previous element.</p>
<div>
<p>This is a paragraph.</p> <!-- هذا هو العنصر الذي أظهرنا له حدود -->
<p id="demo">This is a paragraph.</p>
<p>This is a paragraph.</p>
</div>
<script>
// element في متغير إسمه demo يساوي id هنا قمنا بتخزين العنصر الذي يملك
var element = document.getElementById('demo');
// و أظهرنا له حدود element هنا قمنا بالإنتقال للعنصر السابق الموجود قبل العنصر الذي يمثله المتغير
element.previousElementSibling.style.border = '2px solid red';
</script>
</body>
</html>
الوصول للعنصر الذي يعتبر الإبن الأول
يمكنك استخدام الخاصية
العنصر الذي تصل له يمكنك تخزينه في متغير أو التعامل معه بشكل مباشر.
في المثال التالي قمنا بإظهار حدود لأول عنصر موجود في العنصر الذي يملك id يساوي
مثال
<!DOCTYPE html>
<html>
<body>
<h1>JS Move To First Child Element</h1>
<p>You can use the "firstElementChild" property to move to the first child element.</p>
<div id="demo">
<p>This is a paragraph.</p> <!-- هذا هو العنصر الذي أظهرنا له حدود -->
<p>This is a paragraph.</p>
<p>This is a paragraph.</p>
<p>This is a paragraph.</p>
</div>
<script>
// element في متغير إسمه demo يساوي id هنا قمنا بتخزين العنصر الذي يملك
var element = document.getElementById('demo');
// و أظهرنا له حدود element هنا قمنا بالإنتقال للعنصر الذي يُعتبر الإبن الأول في العنصر الذي يمثله المتغير
element.firstElementChild.style.border = '2px solid red';
</script>
</body>
</html>
الوصول للعنصر الذي يعتبر الإبن الأخير
يمكنك استخدام الخاصية
العنصر الذي تصل له يمكنك تخزينه في متغير أو التعامل معه بشكل مباشر.
في المثال التالي قمنا بإظهار حدود لأول عنصر موجود في العنصر الذي يملك id يساوي
مثال
<!DOCTYPE html>
<html>
<body>
<h1>JS Move To Last Child Element</h1>
<p>You can use the "lastElementChild" property to move to the last child element.</p>
<div id="demo">
<p>This is a paragraph.</p>
<p>This is a paragraph.</p>
<p>This is a paragraph.</p>
<p>This is a paragraph.</p> <!-- هذا هو العنصر الذي أظهرنا له حدود -->
</div>
<script>
// element في متغير إسمه demo يساوي id هنا قمنا بتخزين العنصر الذي يملك
var element = document.getElementById('demo');
// و أظهرنا له حدود element هنا قمنا بالإنتقال للعنصر الذي يُعتبر الإبن الأخير في العنصر الذي يمثله المتغير
element.lastElementChild.style.border = '2px solid red';
</script>
</body>
</html>
الوصول لجميع العناصر التي تعتبر أبناء للعنصر
يمكنك استخدام الخاصية
العناصر التي ترجع لك كمصفوفة يمكنك تخزينها في متغير أو التعامل معها بشكل مباشر.
في المثال التالي قمنا بإظهار حدود لأول و ثالث عنصر موجود في العنصر الذي يملك id يساوي
مثال
<!DOCTYPE html>
<html>
<body>
<h1>JS Access Children Elements</h1>
<p>You can use the "children" property to move to access all children elements.</p>
<div id="demo">
<p>This is a paragraph.</p>
<p>This is a paragraph.</p>
<p>This is a paragraph.</p>
<p>This is a paragraph.</p> <!-- هذا هو العنصر الذي أظهرنا له حدود -->
</div>
<script>
// element في متغير إسمه demo يساوي id هنا قمنا بتخزين العنصر الذي يملك
var element = document.getElementById('demo');
// و أظهرنا له حدود element هنا قمنا بالإنتقال للعنصر الذي يُعتبر الإبن الأول في العنصر الذي يمثله المتغير
element.children[0].style.border = '2px solid red';
// و أظهرنا له حدود element هنا قمنا بالإنتقال للعنصر الذي يُعتبر الإبن الثالث في العنصر الذي يمثله المتغير
element.children[2].style.border = '2px solid red';
</script>
</body>
</html>
الإنتقال بحرية بين عناصر DOM
عندما تنطلق من عنصر محدد في الصفحة فإنك قادر على الإنتقال أكثر من مرة في ذات الوقت و إليك بضعة أمثلة.
في المثال التالي قمنا بالإنتقال من العنصر الذي يملك id يساوي
المثال الأول
<!DOCTYPE html>
<html>
<!-- هذا هو العنصر الذي أظهرنا له حدود -->
<body>
<h1>JS DOM Navigation</h1>
<p>In this example we move up twice.</p>
<div>
<p id="demo">This is a paragraph.</p>
<p>This is a paragraph.</p>
<p>This is a paragraph.</p>
</div>
<script>
// element في متغير إسمه demo يساوي id هنا قمنا بتخزين العنصر الذي يملك
var element = document.getElementById('demo');
// ثم أظهرنا له حدود <body> و بعدها صعدنا للوسم <div> هنا صعدنا للوسم
element.parentNode.parentNode.style.border = '2px solid red';
</script>
</body>
</html>
في المثال التالي قمنا بالإنتقال من العنصر الذي يملك id يساوي
المثال الثاني
<!DOCTYPE html>
<html>
<body>
<h1>JS DOM Navigation</h1>
<p>In this example we move up to the parent element and
then select the last child element inside it.</p>
<div>
<p id="demo">This is a paragraph.</p>
<p>This is a paragraph.</p>
<p>This is a paragraph.</p> <!-- هذا هو العنصر الذي أظهرنا له حدود -->
</div>
<script>
// element في متغير إسمه demo يساوي id هنا قمنا بتخزين العنصر الذي يملك
var element = document.getElementById('demo');
// فيه ثم أظهرنا له حدود <p> و بعدها نزلنا لآخر وسم <div> هنا صعدنا للوسم
element.parentNode.lastElementChild.style.border = '2px solid red';
</script>
</body>
</html>
في المثال التالي قمنا بالإنتقال من العنصر الذي يملك id يساوي
المثال الثالث
<!DOCTYPE html>
<html>
<body>
<h1>JS DOM Navigation</h1>
<p>In this example we move to the next element and
then selecting the next element again.</p>
<div>
<p id="demo">This is a paragraph.</p>
<p>This is a paragraph.</p>
<p>This is a paragraph.</p> <!-- هذا هو العنصر الذي أظهرنا له حدود -->
</div>
<script>
// element في متغير إسمه demo يساوي id هنا قمنا بتخزين العنصر الذي يملك
var element = document.getElementById('demo');
// و أظهرنا له حدود element هنا قمنا بالإنتقال إلى العنصر التالي و من ثم الذي يليه نسبةً للعنصر الذي يمثله المتغير
element.nextElementSibling.nextElementSibling.style.border = '2px solid red';
</script>
</body>
</html>