JQuery - 如何正确删除Internet Explorer中的CSS属性?

时间:2011-12-25 23:05:56

标签: jquery internet-explorer

我正在进行一些表单验证,并注意到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("")
    }

2 个答案:

答案 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", "");
}