javascript - span - ¿Eliminar elementos por nombre de clase?
innerhtml jquery ejemplos (12)
Brett: ¿sabe usted que el soporte de getElementyByClassName
de IE 5.5 a 8 getElementyByClassName está de getElementyByClassName ? Sería mejor seguir este patrón si le importa la compatibilidad entre navegadores:
- Obtener contenedor elemento por ID.
- Obtenga elementos secundarios necesarios por nombre de etiqueta.
- Iterar sobre los niños, prueba la coincidencia de la propiedad className.
-
elements[i].parentNode.removeChild(elements[i])
como los otros tipos dijeron.
Ejemplo rápido:
var cells = document.getElementById("myTable").getElementsByTagName("td");
var len = cells.length;
for(var i = 0; i < len; i++) {
if(cells[i].className.toLowerCase() == "column") {
cells[i].parentNode.removeChild(cells[i]);
}
}
Aquí hay una demostración rápida.
EDITAR: Aquí está la versión fija, específica para su marcado:
var col_wrapper = document.getElementById("columns").getElementsByTagName("div");
var elementsToRemove = [];
for (var i = 0; i < col_wrapper.length; i++) {
if (col_wrapper[i].className.toLowerCase() == "column") {
elementsToRemove.push(col_wrapper[i]);
}
}
for(var i = 0; i < elementsToRemove.length; i++) {
elementsToRemove[i].parentNode.removeChild(elementsToRemove[i]);
}
El problema fue mi culpa; cuando elimina un elemento de la matriz resultante de elementos, la longitud cambia, por lo que un elemento se omite en cada iteración. La solución es almacenar una referencia a cada elemento en una matriz temporal, y luego realizar un ciclo sobre esos, eliminando cada uno del DOM.
Tengo el siguiente código para encontrar elementos con su nombre de clase:
// Get the element by their class name
var cur_columns = document.getElementsByClassName(''column'');
// Now remove them
for (var i = 0; i < cur_columns.length; i++) {
}
Simplemente no sé cómo eliminarlos ... ¿TENGO que hacer referencia al padre o algo así? ¿Cuál es la mejor manera de manejar esto?
@ Karim79:
Aquí está el JS:
var col_wrapper = document.getElementById("columns").getElementsByTagName("div");
var len = col_wrapper.length;
alert(len);
for (var i = 0; i < len; i++) {
if (col_wrapper[i].className.toLowerCase() == "column") {
col_wrapper[i].parentNode.removeChild(col_wrapper[i]);
}
}
Aquí está el HTML:
<div class="columns" id="columns">
<div class="column"><input type="checkbox" name="col_list[]" value="cows">cows</div>
<div class="column"><input type="checkbox" name="col_list[]" value="cows">cows</div>
<div class="column"><input type="checkbox" name="col_list[]" value="cows">cows</div>
<div class="column"><input type="checkbox" name="col_list[]" value="cows">cows</div>
<div name="columnClear" class="contentClear" id="columnClear"></div>
</div>
Editar: Bueno, terminé simplemente usando la opción jQuery.
En caso de que desee eliminar elementos que se agregan dinámicamente, intente esto:
document.body.addEventListener(''DOMSubtreeModified'', function(event) {
const elements = document.getElementsByClassName(''your-class-name'');
while (elements.length > 0) elements[0].remove();
});
Esto funciona para mí
while (document.getElementsByClassName(''my-class'')[0]) {
document.getElementsByClassName(''my-class'')[0].remove();
}
Los elementos de omisión fallan en esto (código de arriba)
var len = cells.length;
for(var i = 0; i < len; i++) {
if(cells[i].className.toLowerCase() == "column") {
cells[i].parentNode.removeChild(cells[i]);
}
}
se puede arreglar simplemente ejecutando el ciclo hacia atrás de la siguiente manera (para que la matriz temporal no sea necesaria)
var len = cells.length;
for(var i = len-1; i >-1; i--) {
if(cells[i].className.toLowerCase() == "column") {
cells[i].parentNode.removeChild(cells[i]);
}
}
Prefiero usar forEach
over for
/ while
looping. Para utilizarlo es necesario convertir HTMLCollection
en Array
primero:
Array.from(document.getElementsByClassName("post-text"))
.forEach(element => element.remove());
Presta atención, no es necesario de la manera más eficiente. Simplemente mucho más elegante para mí.
Puede usar esta sintaxis: node.parentNode
Por ejemplo:
someNode = document.getElementById("someId");
someNode.parentNode.removeChild(someNode);
Puede usar una solución simple, simplemente cambie la clase, se actualiza el filtro de recopilación de HTML:
var cur_columns = document.getElementsByClassName(''column'');
for (i in cur_columns) {
cur_columns[i].className = '''';
}
Ref: http://www.w3.org/TR/2011/WD-html5-author-20110705/common-dom-interfaces.html
Sí, debe eliminar del padre:
cur_columns[i].parentNode.removeChild(cur_columns[i]);
Si prefiere no usar JQuery:
function removeElementsByClass(className){
var elements = document.getElementsByClassName(className);
while(elements.length > 0){
elements[0].parentNode.removeChild(elements[0]);
}
}
Sin jQuery, podrías hacer:
const elements = document.getElementsByClassName("my-class");
while (elements.length > 0) elements[0].remove();
Usando ES6 puedes hacer como:
const removeElements = (elms) => [...elms].forEach(el => el.remove());
// Use like:
removeElements( document.querySelectorAll(".remove") );
<p class="remove">REMOVE ME</p>
<p>KEEP ME</p>
<p class="remove">REMOVE ME</p>
usando jQuery (que realmente podría estar usando en este caso, creo), podría hacer esto así:
$(''.column'').remove();
De lo contrario, necesitará usar el padre de cada elemento para eliminarlo:
element.parentNode.removeChild(element);