Eliminar a los niños por clase que no funcionan en Internet Explorer
-
25-10-2019 - |
Pregunta
Tengo un script (ayudado por @briguy37 ¿Eliminar múltiples elementos con el mismo nombre usando RemoVeChild?) que elimina todos los elementos con un determinado nombre de clase usando un bucle for y usando RemoVeChild. Está funcionando perfectamente en FF, pero en IE, recibo el error
Object doesnt support this property or method
El proyecto se puede ver en: http://jsfiddle.net/u8xkg/31/
El error se refiere a la línea:
var childNodesToRemove = document.getElementById(parentId).getElementsByClassName('foo');
¿Algunas ideas?
Gracias.
Solución
document.getElementsByClassName = function(class_name)
{
var all = this.getElementsByTagName('*');
var matchArray = new Array();
var re = new RegExp("(?:^|\\s)" + class_name + "(?:\\s|$)");
for (var i = 0, l = all.length; i < l; i++)
{
if (re.test(all[i].className))
matchArray.push(all[i]);
}
return matchArray;
}
Otros consejos
Desafortunadamente, no hay método GetElementsByClassName en IE.
Compruebe si existe tal método - getElementsByClassName
. Si no, verifique si querySelectorAll
El método es compatible. Si, una vez más, no, debería usar mejor un marco para obtener nodos. Especialmente este código está destinado a ser navegador cruzado.
Si no está utilizando ningún marco en su proyecto (jQuery, yui, etc ...), entonces hágase un favor y aumente su productividad al menos, incluida la inclusión del Biblioteca de chisporroteo Eso agrega capacidades del selector CSS3 a cualquier navegador, pero es bastante liviano y rápido. Eso te dejará hacer:
var childNodesToRemove = Sizzle(".foo");