jQuery: атрибут для стиля не работает в IE - PullRequest
0 голосов
/ 31 мая 2011

Почему следующий код не будет работать в браузерах IE (7 и 8)?

$("ul li").each(function() {
  if(($.trim($(this).attr("style"))) != "display: none;"){
     //if content
  }else if(($.trim($(this).attr("style"))) == "display: none;"){
     //else content
  }
});

Примечание. Первые 4 элемента li не имеют атрибута "style", а остальные 8 не работают.

Ответы [ 3 ]

4 голосов
/ 31 мая 2011

Не проверяйте атрибут style.Он не обязательно вернет текущую реальность и не учитывает стили, определенные в других местах.

Используйте фильтр :hidden или css метод:

if ($(this).is(':hidden')) {

}

// or

if ($(this).css('display') == 'none') {

}

Я бы предпочел первый синтаксис, поскольку он учитывает немного больше, чем просто стиль display.

0 голосов
/ 31 мая 2011

Вы сравниваете атрибут со свойством, отображение - это свойство элемента, а не атрибут.

Лучше с чем-то вроде этого:

if( ($.trim($(this).is(':visible') ) {
    // it's visible, do something
}
else { // no need for second condition, we *know* it's not visible!
    // it's not visible so do something else

}
0 голосов
/ 31 мая 2011

Используйте этот код вместо:

("ul li").each(function() {
  if(($.trim($(this).css("display"))) != "none"){
     //if content
  }else if(($.trim($(this).css("display"))) == "none"){
     //else content
  }
});
...