我正在进行一些表单验证,并注意到Internet Explorer无法正常工作(一如既往)。如果我将一些文本和CSS附加到div元素并再次删除它(当输入正常时),资源管理器不会再次更正显示。我的意思是文本被删除,但仍然有一个空行(好像有br元素)。我检查了源代码并正确删除了CSS,但显示不正确。为什么呢?
其他浏览器没有问题。
if(bla)
{
$("div[bez='avz_kw_err']").eq(index).html("Mindestens 3 Zeichen");
$("div[bez='avz_kw_err']").eq(index).attr("style","color:red; font-size:12px; line-height:12px; position:relative; top:5px; left:25px;");
}
else
{
$("div[bez='avz_kw_err']").eq(index).html("");
$("div[bez='avz_kw_err']").eq(index).attr("")
}
答案 0 :(得分:4)
不要使用“.attr()”来设置jQuery 1.6或更新版本的样式属性。改为使用“.prop()”:
$("div[bez='avz_kw_err']").eq(index).prop("")
“style”属性是属性。 IE对这种差异非常挑剔。使用“.prop()”表示当直接处理由jQuery解包的DOM元素时,你将其视为对象的普通属性:“name”,“id”,“className”,“tagName” “等等。
编辑,因为我今晚很慢 - 说 - 而且都是真的 - 特别是“风格”属性不是字符串值属性。它本身就是一个对象,将其设置为“”对于Firefox或IE来说并没有多大意义。但是可以删除所有CSS属性:
$("div[bez='avz_kw_err']").eq(index).each(function() {
for (var cssp in this.style) {
this.style[cssp] = '';
}
});
再次编辑 - 嘿帮派停止支持我,直到我找到正确的答案 - 这可能不适用于IE ...
编辑男孩是IE很奇怪......在IE8中确实可行:
$("div[bez='avz_kw_err']").eq(index).each(function() {
for (var cssp in this.style) {
try { this.style[cssp] = null; } catch (who_cares) {}
}
});
使用null
代替空字符串显然很重要;在某些时候将某些东西设置为空字符串会导致IE抓住并旋转CPU几秒钟。
答案 1 :(得分:1)
使用.attr("")
不会删除样式,因为您尚未指定要更改的属性。使用.attr("style", "")
清除样式属性。
演示:http://jsfiddle.net/Guffa/tvL42/2/
附注:您不需要创建新的jQuery对象来设置HTML和样式,只需链接调用:
if(bla) {
$("div[bez='avz_kw_err']").eq(index)
.html("Mindestens 3 Zeichen")
.attr("style","color:red; font-size:12px; line-height:12px; position:relative; top:5px; left:25px;");
} else {
$("div[bez='avz_kw_err']").eq(index)
.html("")
.attr("style", "");
}