【发布时间】:2011-02-24 16:43:37
【问题描述】:
仍在寻找答案。
更改或重新分配给过滤器的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;
}
}
【问题讨论】:
-
在您的真实页面中,您是否有多个“类”值?当容器和被容器在“类”中都有多个值时,IE 可能对“.foo .bar”规则非常愚蠢。
-
Pointy,我不使用多个类,正是因为这个原因:) 我什至尝试将 css 简化为
.filter_delete_link,但不行。 -
IE6 有多个类的问题,IE7 不应该。
-
调整窗口大小时,样式最终是否应用于动态元素?
-
调整窗口大小没有任何作用。
标签: javascript html css internet-explorer-7 internet-explorer-6