2009-09-15 2 views
0

Это простое задание на веб-страницу. У меня есть несколько страниц, на которых я хотел бы, чтобы отобразить тот же список ссылок на боковой панели и так сделали следующий JavaScript:innerHTML не записывается в документ

document.getElementByid('list').innerHTML = '<a href=\"index.html\">Main Page</a>'+ 
'<a href=\"benefits.html\">Benefits</a>'+ 
'<a href=\"facts.html\">Shocking Statistics</a>'+ 
'<a href=\"links.html\">Resources</a>'; 

Затем я добавил это в верхней части страницы с помощью:

<head> 
<script type="text/javascript" src="./script/links.js"></script> 
</head> 
... 
<div id="list"> 
</div> 

Но проблема в том, что ссылки не отображаются, и я боюсь, что мне, возможно, придется вернуться к использованию слишком большого количества строк document.write.

ответ

3

Сценарии запускаются при их загрузке. Поскольку ваш скрипт появляется перед элементом div, который вы пытаетесь отредактировать (и поскольку вы ничего не предпринимаете, чтобы задержать его выполнение), document.getElementById вернет значение null, и скрипт будет ошибочен.

Переместить сценарий непосредственно перед </body>.

Кроме того, метод getElementById не getElementByid.

Сказанное, в зависимости от JavaScript, чтобы добавить базовую навигацию, является плохой идеей. Вероятно, вам будет лучше использовать pre-processor or server side solution.

4

Я делаю это все время ...

getElementByid 

должен быть

getElementById 

EDIT: Моя ошибка состоит в том, чтобы капитализировать д ... getElementByID.

+1

+1 - IDE полезен для этого. Я использую Eclipse, и выполнение кода - это то, от чего я зависим. :) –

+2

также являются «лишними», поскольку он находится внутри одинарных кавычек. –

+0

Хотя это правда, у него есть опечатка, это только часть проблемы. Большая концептуальная проблема - это время. –

2

Проблема в том, что вы пытаетесь получить доступ к элементу по идентификатору, который еще не существует. Ваш скрипт будет выполнен в том месте, в котором он включен. Вам нужно подождать, пока документ не будет проанализирован, и дерево DOM будет подготовлено. Вы можете сделать это, используя окно load событие, или если вы используете любой набор инструментов JavaScript, например Prototype или jQuery, они обычно предлагают что-то, что происходит раньше (поскольку window.load происходит только после загрузки всех изображений).

EDIT: И, конечно, как говорили другие, у вас есть опечатка, это getElementById.

+0

Опечатка является основной причиной. Сначала устраните очевидную проблему. Затем вернитесь, чтобы определить, нужно ли это для проверки состояния DOM. – Mayo

+0

Они оба являются коренными причинами: они не будут работать ни с исправлением. –

0

У вас будет проблема с методом innerHTML, потому что элемент документа <div>, который вы пытаетесь найти, может еще не присутствовать в документе. Вам нужно будет вызвать материал innerHTML после загрузки документа, если вы идете по этому маршруту.

Здесь нет ничего плохого в document.write. Если вам действительно нужно динамически писать контент с помощью JavaScript, использование document.write позволит избежать беспорядка с обработчиками событий загрузки и заставит ваш контент появляться сразу, а не заметно менять документ после его загрузки.

0

Вам необходимо вызвать javascript после того, как тело загрузилось так, что элемент, на который вы ссылаетесь, был инициализирован. Для этого вы должны поместить свой код в функцию. например

функция сборкаNav() { ... }

Затем на вашем теле тега, используйте событие OnLoad:

<body onload="buildNav()">

Это способ, Javascript не будет работать, пока тело не загрузится.

0

Помимо капитализации и порядка загрузки «id», как правило, очень плохая идея сделать существенный контент веб-страницы, например, ваши навигационные ссылки, зависящие от JavaScript.

Это дает вам проблемы с доступностью и означает, что поисковые системы будут игнорировать все ваши ссылки. Не очень хорошая сделка только для сохранения копий и вклеивания нескольких тегов <.

Для воспроизведения общих элементов страницы ознакомьтесь с методами обработки страниц на сервере, самым простым из которых является SSI.

Смежные вопросы