Все еще ищу ответ.
Изменение или переназначение фильтра innerHTML
успешно перерисовывает элемент, но нарушает мой сценарий, так что это не так.
Добавление дополнительных дочерних узлов, включая текстовые узлы, не вызывает перерисовку. Удаление добавленного узла не вызывает перерисовку.
Использование семейства сценариев ie7.js не работает.
В проекте, над которым я работаю, я динамически генерирую (с помощью javascript) фильтры, которые выглядят так:
<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>
И у меня есть CSS, который применяется к каждому фильтру (например):
.filter a.filter_delete_link{
display:block;
height:16px;
background: url('../images/remove_16.gif') no-repeat;
padding-left:20px;
}
Однако в IE 7 (и, вероятно, в 6), похоже, эти стили не применяются к новым фильтрам.
Все отлично работает в Firefox / Chrome / IE8.
Используя инструменты разработчика IE8, установленный в режим IE7, браузер может видеть новые элементы и видеть CSS, но просто не применяет CSS.
Есть ли способ заставить IE перезагрузить стили или, возможно, есть лучший способ это исправить?
JavaScript: (упрощенно)
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;
}
}