¿CSS no se aplica a elementos creados dinámicamente en IE 7?
Sigo buscando una respuesta.
Cambiar o reasignar a los filtrosinnerHTML
vuelve a dibujar con éxito el elemento, pero rompe mi script, así que eso está fuera.
Agregar nodos secundarios adicionales, incluidos nodos de texto, no obliga a volver a dibujar. Eliminar el nodo agregado no obliga a volver a dibujar.
Usar la familia de scripts ie7.js no funciona.
En el proyecto en el que estoy trabajando, genero dinámicamente (con javascript) filtros que se ven así:
<div class="filter">
<a ... class="filter_delete_link">Delete</a>
<div class="filter_field">
...
</div>
<div class="filter_compare">
...
</div>
<div class="filter_constraint">
...
</div>
<div class="filter_logic">
...
</div>
</div>
Y tengo CSS que se aplica a cada filtro (por ejemplo):
.filter a.filter_delete_link{
display:block;
height:16px;
background: url('../images/remove_16.gif') no-repeat;
padding-left:20px;
}
Sin embargo, parece que en IE 7 (y probablemente 6 para el caso), estos estilos no se aplican a los nuevos filtros.
Todo funciona perfectamente en Firefox / Chrome / IE8.
Usando las herramientas de desarrollador IE8, configuradas en modo IE7, el navegador puede ver los nuevos elementos y puede ver el CSS, pero simplemente no está aplicando el CSS.
¿Hay alguna manera de obligar a IE a recargar estilos, o tal vez hay una mejor manera de solucionar esto?
El JavaScript: (simplificado)
var builder = {
...
createNewFilter: function() {
var newFilter = document.createElement('div');
var deleteLink = document.createElement('a');
deleteLink.href = '#';
deleteLink.setAttribute('class','filter_delete_link');
deleteLink.title = 'Delete Condition';
deleteLink.innerHTML = "Delete";
newFilter.appendChild(deleteLink);
var field = document.createElement('div');
field.setAttribute('class','filter_field');
var fieldSelect = this.getFieldSelectBox();
field.appendChild(fieldSelect);
newFilter.appendChild(field);
// more of the same...
deleteLink.onclick = function() {
builder.removeFilter(newFilter);
};
fieldSelect.onchange = function () {
builder.updateFilter(newFilter);
}
return newFilter;
},
addNewFilter: function() {
var nNewFilter = this.createNewFilter(this.numFilters++);
this.root.insertBefore(nNewFilter,this.nAddLink);
//other unrelated stuff...
//provided by Josh Stodola
//redraw(this.root);
return nNewFilter;
}
}