Задать вопрос
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
  • Вопрос задан
  • 2744 просмотра
Подписаться 2 Оценить Комментировать
Решения вопроса 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];
}

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

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

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

Похожие вопросы