Задать вопрос
dnv777
@dnv777

Firefox. HTML5. JS доступ к элемету по ID

Есть код
<!DOCTYPE html >
<html><body>
   <div id='dv'></div> 
</body></html>
<script>
  dv.innerHTML='hello';
</script>


все браузеры кроме FF работают корректно. в FF только так
document.getElementID(«dv»).innerHTML='hello';
хотя если отключаю Doctype, то и так все работает.

хотел перевести сайт на HTML5, и тут встретил такую нежданку от FF. переделывать все скрипты сайта под этот прикол не реально.

в чем проблема?
FF стоит последний


вопрос снят. оборачиваю все в jQuery и document.getElementID
  • Вопрос задан
  • 2746 просмотров
Подписаться 2 Оценить Комментировать
Помогут разобраться в теме Все курсы
  • Академия Eduson
    Fullstack-разработчик на JavaScript
    11 месяцев
    Далее
  • Skillbox
    JavaScript
    3 месяца
    Далее
  • ProductStar
    Javascript: продвинутый уровень
    1 месяц
    Далее
Решения вопроса 1
dnv777
@dnv777 Автор вопроса
я тут написал макрос для VS.NET, чтоб оборачивать элементы в jQuery, приводя их в нормальный вид из «привет 90х». может кому тоже пригодится.
Private Sub Wrap(ByVal prefix, ByVal sufix)
Dim t As EnvDTE.TextSelection = DTE.ActiveDocument.Selection

If t.Text.Length = 0 Then
t.WordLeft()
t.WordRight(True)
End If
t.Text = prefix & t.Text.Trim & sufix

End Sub

Public Sub Wrap_jQuery() ' hotkey Alt+J
'оборачиваем obj в $('#obj')
Wrap("$('#", "')")
End Sub

Public Sub Wrap_e() ' hotkey Alt+E
'в js скрипт: function $e(name) { return typeof (name) === 'string' ? document.getElementById(name) : name; }
Wrap("$e('", "')")
End Sub

Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 9
dnv777
@dnv777 Автор вопроса
мне кто-то может ответить почему к элементу в FF нельзя обращаться напрямую?
без комментариев по поводу валидности html5 и т.п.?
Ответ написан
@venn
Вот тут можно почитать про твою проблему.
Ответ написан
Комментировать
@egorinsk
> хотел перевести сайт на HTML5
> обращение к DOM элементу через свойство window

Вы вместо тега «html» напишите «html5», тогда точно заработает.
Ответ написан
k12th
@k12th
console.log(`You're pulling my leg, right?`);
Скрипт после /html — не валидно. Поэтому в html5 не работает, только в quirksmode.
dv.innerHTML='hello'; — 90-ые давно кончились.

Если у вас все в таком виде, то да, перейти на что-то современное будет трудно(
Ответ написан
Скрипт вставить в тег head или перед закрытием body.
getelementbyid.ru/
Ответ написан
Комментировать
dnv777
@dnv777 Автор вопроса
понятно. но не удобно… все браузеры понимают а FF нет
в VisualStudio через intellisense можно быстро набирать имена объектов, а теперь придется каждый элемент оборачивать в пользовательскую $e() или в jquery
Ответ написан
Evengard
@Evengard
Ого. Честно говоря, я думал так уже давно во всех браузерах… Таки нет, эта древность до сих пор сохранилась. Надо же.

Пользуйтесь таки
var dv = document.getElementById('dv');
Ответ написан
Комментировать
dnv777
@dnv777 Автор вопроса
да хватит уже меня минусовать.
осознал свою проблему и закрыт тему…
Ответ написан
Комментировать
вообще, я совершенно согласен со всеми комментаторами, которые высказывались выше.
Если вы переходите на современные технологии, то переходите полностью. Не переходите — не переходите.
Если по какой-то причине это нереально важно, то можно (хотя я крайне не рекомендую) сделать такой некрасивый хак:
var all = document.getElementsByTagName('*');
for (var i = all.length; i--;) if (all[i].id) {
  document[all[i].id] = all[i];
}

Правда стоит учесть, что элементы, которые добавлены динамически (после старта скрипта) — так не получишь.

Но вы должны понимать, что пользуетесь настолько устаревшим стандартом, что очень скоро ваш сайт перестанет работать в огромном количестве браузеров. Лучше переходите сейчас на современные технологии, пока не поздно.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
ITK academy Нижний Новгород
от 50 000 до 90 000 ₽
ITK academy Казань
от 50 000 до 90 000 ₽