почему если (element.innerHTML == "") не работает в Firefox - PullRequest
15 голосов
/ 09 сентября 2010

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

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

Ответы [ 4 ]

17 голосов
/ 09 сентября 2010

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

Я полагаю, что на самом деле более строгое соблюдение стандартов рассматривает любой пустой пробел между тегами как текстовый узел, но 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 вручную.

5 голосов
/ 09 сентября 2010

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

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

if (element.innerHTML.trim() == "") {
  //do something
}
3 голосов
/ 09 сентября 2010

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

element.innerHTML.length == 0

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

1 голос
/ 17 января 2012

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

...