Ищем ответ.
Изменение или переназначение фильтра innerHTML
успешно перерисовывает элемент, но прерывает мой script, поэтому out.
Добавление дополнительных дочерних узлов, включая текстовые узлы, не вызывает перерисовки. Удаление добавленного node не приводит к перерисовке.
Использование семейства скриптов 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;
}
}