Почему if (element.innerHTML == "") не работает в firefox

почему if (element.innerHTML == "") не работает в firefox

но отлично работает в IE, любые идеи, пожалуйста?

Ответы

Ответ 1

Трудно сказать, не видя ваш HTML, но я бы сказал, вероятно, потому, что у вас есть пустое пустое пространство в элементе, и IE не рассматривает это как текст node, в то время как FF делает.

Я считаю, что на самом деле более строгое соблюдение стандартов относится к любому пустому пробелу между тегами в виде текста node, но IE не соответствует.

Вы можете сделать:

var htmlstring = element.innerHTML;

  // use the native .trim() if it exists
  //   otherwise use a regular expression  
htmlstring = (htmlstring.trim) ? htmlstring.trim() : htmlstring.replace(/^\s+/,'');

if(htmlstring == '') {...

Или просто избавьтесь от пробелов в своей разметке HTML вручную.

Ответ 2

Вы можете проверить, есть ли element.innerHTML.trim() == "" для получения наилучших результатов. Однако тогда вам нужно расширить прототип строки с помощью метода trim():

if (!String.prototype.trim) {
    String.prototype.trim = function() { return this.replace(/^\s+|\s+$/, ''); };
}

if (element.innerHTML.trim() == "") {
  //do something
}

Ответ 3

Альтернативным методом проверки пустой строки является проверка длины:

element.innerHTML.length == 0

Но вам все равно придется trim(), если у вас есть строка пробелов, которую вы хотели бы сопоставить.

Ответ 4

Мне показалось, что установка innerHTML не работала в Firefox и Chrome, но она работала в IE из-за моей ошибки. Оказалось, что я никогда не получал элемент, использующий getElementById в первую очередь. IE кажется очень тонким с элементами, которые определены с помощью name= с getElementById, но Firefox и Chrome были более строгими и принимают только элементы id=. (Вернее, на мой взгляд) Надеюсь, это избавит кого-то от разочарования.
 Почему IE делает такие вещи и путает людей...