Todavía estoy buscando una respuesta.CSS no se aplica a los elementos creados dinámicamente en IE 7?
Al cambiar o reasignar al filtro innerHTML
, se vuelve a dibujar el elemento con éxito, pero se rompe el guión, por lo que queda fuera.
La adición de nodos secundarios adicionales, incluidos los nodos de texto, no obliga a un redibujado. Eliminar el nodo agregado no obliga a volver a dibujar.
El uso de la familia de scripts ie7.js no funciona.
En el proyecto que estoy trabajando, me generan dinámicamente (con javascript) filtros que tener este aspecto:
<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 no 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.
Utilizando las herramientas de desarrollador de IE8, establezca el 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 volver a cargar estilos, o quizás hay una mejor manera de arreglar esto?
La 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;
}
}
En su página real, ¿tiene múltiples valores de "clase"? IE puede ser bastante estúpido con las reglas ".foo .bar" cuando el contenedor y el contenedor tienen valores múltiples en la "clase". – Pointy
Puntiaguda, no uso múltiples clases, y exactamente por esa razón :) Incluso traté de simplificar el CSS para simplemente '.filter_delete_link', pero no voy. –
IE6 tiene problemas con varias clases, IE7 no debería. –