سؤال

بعد الرد هذا السؤال لقد تركت أتساءل لماذا removeChild يحتاج إلى عنصر الوالدين. بعد كل شيء ، يمكننا ببساطة القيام به

node.parentNode.removeChild(node);

نظرًا لأن العقدة الأصل يجب أن تكون متاحة مباشرة لمحرك JavaScript/DOM ، فليس من الضروري تمامًا توفير العقدة الأصل للعقدة التي سيتم إزالتها.

بالطبع أفهم مبدأ ذلك removeChild هي طريقة لعقدة DOM ، ولكن لماذا لا يشبه شيء document.removeNode موجود (وهذا يقبل مجرد عقدة تعسفية كمعلمة)؟

تعديل: لكي نكون أكثر وضوحًا ، فإن السؤال هو: لماذا يحتاج محرك JS إلى العقدة الأصل على الإطلاق ، إذا كان لديه بالفعل العقدة (الفريدة) التي سيتم إزالتها؟

هل كانت مفيدة؟

المحلول

أعتقد أنه يحافظ على التصميم بسيط. الأنود مايو موجودة في عزلة ولكن الحالة الأكثر إثارة للاهتمام هي شجرة دوم. مع removeChild, ، يجب أن تكون العقدة المراد إزالتها طفلًا في العقدة التي تم استدعاء الطريقة.

إن الحصول على قائمة بجميع الأطفال وإجراء مقارنة يدوية مع كل منهم ليس عملية باهظة الثمن. ومع ذلك ، فإن البحث في جميع أحفاد العقدة التي سيتم إزالتها مكلفة بالفعل.

يحرر: استجابةً للتحديث الخاص بك ، يقوم المتصفح ببساطة بتنفيذ مواصفات DOM, ، الذي يحدد أ removeChild طريقة على Node. المواصفات ، فى رايى, ، يجب أن تكون لا لبس فيها وخالية من الافتراضات. انه ايضا مشابه حقن التبعية من هذا المنظور. تقوم DOM Core Spec بتطوير شجرة باستخدام لبنات البناء مثل العقدة والعنصر وما إلى ذلك. إضافة طريقة وحيدة مثل removeNode في مكان ما في لبنات البناء هذه يعني أن الطريقة لها معرفة ضمنية ببيئتها - أنها may كن طفلاً في بعض العقدة ، ويجب إزالته من هناك إذا كان كذلك.

مهمة W3 هي جعل واجهة برمجة تطبيقات قوية للغاية مما يجعل معظم الأشياء ممكنة. لا ينبغي أن يقلقوا بشأن السكر النحوي لأنه يمكن دائمًا كتابته حول واجهات برمجة التطبيقات الأصلية إذا كانت مكتوبة جيدًا.

نصائح أخرى

قد يكون الارتباك لأنك قد تعتقد أن إزالة عنصر ما يعني شيئًا مثل قتله أو تدميره.

enter image description here

ولكن في الواقع ، مفهوم إزالة يعني في الأساس كسر العلاقة بين الطفل ووالده. انها مجرد مفرزة.

enter image description here

لذلك ، فإن إزالة العنصر الذي ليس له عقدة الوالدين لا معنى له. ومن المعقول أنه إذا كنت ترغب في كسر هذه العلاقة بين أحد الوالدين والطفل ، فأنت بحاجة إلى إشارة إلى كليهما.

ومع ذلك ، فمن الصحيح أنك في بعض الأحيان تريد فقط إزالة طفل من والديه ، دون الاهتمام بهذا الوالد على الإطلاق. لهذا السبب يقدم DOM المستوى 4 ChildNode الواجهة ، التي توفر remove طريقة.

يتم تنفيذ تلك الواجهة بواسطة DocumentType, Element و CharacterData, ، حتى تتمكن من استخدامه على Doctypes, عناصر و Text, Comment, ، و ProcessingInstruction العقد.

على افتراض node هو واحد من هذه ، يمكنك استخدام

node.remove();

في حالة عدم وجود عقدة أولية بالفعل ، لا شيء يحدث.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top