CSS ne s'applique pas à créer dynamiquement des éléments dans IE 7?

Toujours à la recherche d'une réponse.

La modification ou la réaffectation du filtre innerHTML avec succès retrace l'élément, mais les sauts de mon script, de sorte que l'.

L'ajout de nœuds enfants, y compris les nœuds de texte, ne force pas un dessin. Retirer le nœud ajouté ne force pas un dessin.

À l'aide de la ie7.js la famille de scripts ne fonctionne pas.


Dans le projet sur lequel je travail, je générer dynamiquement (avec javascript) filtres qui ressemblent à ceci:

<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>

Et j'ai CSS qui s'applique à chaque filtre (par exemple):

.filter a.filter_delete_link{
    display:block;
    height:16px;
    background: url('../images/remove_16.gif') no-repeat;
    padding-left:20px;
}

Cependant, il semble que dans IE 7 (et probablement 6), ces styles ne sont pas appliquées à la de nouveaux filtres.

Tout fonctionne parfaitement sous Firefox/Chrome/IE8.

À l'aide de la IE8 outils de développement, mis à la mode IE7, le navigateur peut voir les nouveaux éléments, et peuvent voir le CSS, mais n'est tout simplement pas l'application de la feuille de style CSS.

Est-il un moyen de forcer IE pour recharger les styles, ou peut-être est-il un meilleur moyen de résoudre ce problème?


Le JavaScript: (simplifié)

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;
    }
}
Dans votre page réelle, avez-vous plusieurs "classe" valeurs? C'est à dire peut être assez stupide a propos de ".foo .bar" règles lorsque le conteneur et le containee les deux ont plusieurs valeurs dans la "classe".
Pointues, je n'ai pas l'utilisation de plusieurs classes, et c'est précisément pour cette raison 🙂 j'ai même essayé de simplifier le css à juste .filter_delete_link, mais pas y aller.
IE6 a des problèmes avec plusieurs classes, IE7 ne le sont pas.
Lorsque vous redimensionnez la fenêtre, les styles sont enfin appliquées à la dynamique des éléments?
Le redimensionnement de la fenêtre ne permet pas de faire quoi que ce soit.

OriginalL'auteur Austin Hyde | 2010-05-27