JQuery - Как правильно удалить атрибуты CSS в Internet Explorer? - PullRequest
3 голосов
/ 26 декабря 2011

Я делаю некоторую проверку формы и заметил, что 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 ]

4 голосов
/ 26 декабря 2011

Не используйте ".attr ()" для установки свойства стиля с помощью jQuery 1.6 или новее.Вместо этого используйте ".prop ()":

$("div[bez='avz_kw_err']").eq(index).prop("")

Свойство "style" является свойством .IE очень требователен к разнице.Используйте «.prop ()» для всего, что, когда вы имеете дело с элементом DOM, не обернутым jQuery, вы рассматриваете как обычное свойство объекта: «name», «id», «className», «tagName»"и т. д.

редактировать, потому что я медленный этим вечером , - сказал он, и все это правда, - в частности, свойство" style "не является строковым свойством.Это объект сам по себе, и установка его в "" не имеет смысла (для Firefox или IE).Но вы можете запаковать все свойства CSS:

$("div[bez='avz_kw_err']").eq(index).each(function() {
  for (var cssp in this.style) {
    this.style[cssp] = '';
  }
});

отредактируйте снова - эй, банда, перестаньте голосовать против меня, пока я не найду правильный ответ - это может не сработатьв IE ...

edit мальчик - это IE странно ... OK в 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 захватил и на несколько секунд развернул процессор.

1 голос
/ 26 декабря 2011

Использование .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", "");
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...