جافاسكريبت - إزالة عنصر بواسطة المعرف
عند إزالة عنصر باستخدام جافاسكريبت القياسية، يجب أن تذهب أولاً إلى العنصر الأب له:
var element = document.getElementById("element-id");
element.parentNode.removeChild(element);
يبدو لي أن الاضطرار للذهاب إلى العقدة الأصلية أولاً أمر غريب بعض الشيء، هل هناك سبب يجعل جافا سكريبت تعمل بهذه الطريقة؟
الإجابة رقم 1
أعلم أن تعزيز وظائف DOM الأصلية ليس دائمًا أفضل أو أكثر الحلول شيوعًا، لكن هذا يعمل بشكل جيد في المتصفحات الحديثة.
Element.prototype.remove = function() {
this.parentElement.removeChild(this);
}
NodeList.prototype.remove = HTMLCollection.prototype.remove = function() {
for(var i = this.length - 1; i >= 0; i--) {
if(this[i] && this[i].parentElement) {
this[i].parentElement.removeChild(this[i]);
}
}
}
ومن ثم يمكنك إزالة العناصر مثل هذا
document.getElementById("my-element").remove();
أو
document.getElementsByClassName("my-elements").remove();
ملاحظة: هذا الحل لا يعمل مع IE 7 والإصدارات الأقدم. لمزيد من المعلومات حول توسيع DOM اقرأ هذا المقال.
تعديل: عند مراجعة إجابتي في عام 2019، جاءت node.remove() للإنقاذ ويمكن استخدامها كما يلي (بدون الإضافة أعلاه):
document.getElementById("my-element").remove();
أو
[...document.getElementsByClassName("my-elements")].map(n => n && n.remove());
هذه الوظائف متاحة في جميع المتصفحات الحديثة (ليس إنترنت إكسبلورر). اقرأ المزيد على MDN.
الإجابة رقم 2
متوافق مع جميع المتصفحات و IE الإصدار 11 فأحدث:
document.getElementById("element-id").outerHTML = "";
الإجابة رقم 3
يمكنك إنشاء دالة remove حتى لا تضطر للتفكير في ذلك كل مرة:
function removeElement(id) {
var elem = document.getElementById(id);
return elem.parentNode.removeChild(elem);
}
الإجابة رقم 4
تحديث 2011
تم إضافة هذا إلى مواصفة DOM في عام 2011، لذا يمكنك ببساطة استخدام:
element.remove()
يتم تنظيم DOM في شجرة من العقد، حيث تحتوي كل عقدة على قيمة، بالإضافة إلى قائمة بالمراجع لعقدها الفرعية. لذلك element.parentNode.removeChild(element) يحاكي بالضبط ما يحدث داخليًا: أولاً تذهب إلى العقدة الأم، ثم تزيل المرجع إلى العقدة الفرعية.
اعتبارًا من DOM4، يتم توفير دالة مساعدة للقيام بنفس الشيء: element.remove(). هذا يعمل في 96٪ من المتصفحات (اعتبارًا من 2020)، ولكن ليس في IE 11.
إذا كنت بحاجة إلى دعم المتصفحات الأقدم، يمكنك:
- إزالة العناصر عبر العنصر الأب
- تعديل وظائف DOM الأصلية، كما في جواب يوهان ديتمار، أو
- استخدم مكمّل DOM4.
الإجابة رقم 5
هذا ما يدعمه DOM. ابحث في تلك الصفحة عن "remove" أو "delete" وremoveChild هو الوحيد الذي يزيل العقدة.
الإجابة رقم 6
لإزالة عنصر واحد:
var elem = document.getElementById("yourid");
elem.parentElement.removeChild(elem);
لإزالة جميع العناصر التي على سبيل المثال تحمل اسم فئة معين:
var list = document.getElementsByClassName("yourclassname");
for(var i = list.length - 1; 0 <= i; i--)
if(list[i] && list[i].parentElement)
list[i].parentElement.removeChild(list[i]);
الإجابة رقم 7
يمكنك ببساطة استخدام element.remove()
الإجابة رقم 8
يمكنك إزالة هذا العنصر مباشرة باستخدام طريقة remove() في DOM.
إليك مثال:
let subsWrapper = document.getElementById("element_id");
subsWrapper.remove();
//OR directly.
document.getElementById("element_id").remove();
الإجابة رقم 9
تقوم الطريقة ChildNode.remove() بإزالة الكائن من الشجرة التي ينتمي إليها.
https://developer.mozilla.org/en-US/docs/Web/API/ChildNode/remove
إليك مثالًا يوضح كيفية استدعاء document.getElementById('my-id').remove()
https://jsfiddle.net/52kp584L/
**
لا حاجة لتمديد NodeList. لقد تم تنفيذها بالفعل.
**
الإجابة رقم 10
وفقًا لمواصفات DOM المستوى 4، وهي النسخة الحالية قيد التطوير، هناك بعض طرق التحوير الجديدة المفيدة المتوفرة: append()، prepend()، before()، after()، replace()، و remove().
https://catalin.red/removing-an-element-with-plain-javascript-remove-method/
