Почему 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 делает такие вещи и путает людей...