Если ваши объекты с class="pageNav"
и id="subNav"
существуют и pageNav
содержит желаемое содержимое в нем при первом запуске функции subNavContent()
, то содержимое первого объекта с class="pageNav"
будет скопировано к объекту с id="subNav"
. Примечание. Это не перемещение содержимого, а создание копии HTML-кода и присвоение его объекту subNav
. Он заменит предыдущее содержимое subNav
.
Если он не работает при первом вызове, возможно, это связано с тем, что один из двух объектов еще не существует, или содержимое pageNav
еще не было при запуске функции.
Кроме того, вы не можете иметь два элемента с одинаковым идентификатором. Ваш HTML показывает два элемента с id="subNav"
. Должен быть только один элемент с данным идентификатором. Вот почему document.getElementByid()
возвращает только один элемент.
Кроме того, HTML в вашем вопросе не показывает объект с class="pageNav"
.
Также возможно, что есть проблема с тем, как вы делаете вызов ajax и вызываете эту функцию после завершения вызова ajax. Вы должны будете показать нам свой код ajax, чтобы мы могли это прокомментировать. Если, например, вы не дожидались вызова обработчика успеха вызова ajax, то новый контент не был бы на странице еще при первом запуске функции.
РЕДАКТИРОВАТЬ: после просмотра фактического кода для вызова AJAX на реальной странице ОП.
Я могу подтвердить, что способ, которым вы звоните subNavContent()
при вызове ajax, неверен. Этот код не будет работать, потому что вы звоните subNavContent()
до того, как новый контент будет загружен на страницу. Это ваша существующая версия кода:
function loadContent ( classID, url, type ) {
var xmlhttp;
var dir = getDir ( type );
if ( window.XMLHttpRequest ) {
xmlhttp = new XMLHttpRequest();
xmlhttp.onreadystatechange = function () {
if (xmlhttp.readyState == 4 && xmlhttp.status == 200 ) {
document.getElementById( classID ).innerHTML=xmlhttp.responseText;}};
xmlhttp.open( "GET", dir + url, true );
xmlhttp.send( );
subNavContent ( );}
return; }
Вы звоните subNavContent()
сразу после отправки вашего ajax-запроса. Вы можете выполнить этот вызов только ПОСЛЕ того, как ответ получен, а данные помещены на вашу страницу. Вы можете изменить это на это:
function loadContent ( classID, url, type ) {
var xmlhttp;
var dir = getDir ( type );
if ( window.XMLHttpRequest ) {
xmlhttp = new XMLHttpRequest();
xmlhttp.onreadystatechange = function () {
if (xmlhttp.readyState == 4 && xmlhttp.status == 200 ) {
document.getElementById( classID ).innerHTML=xmlhttp.responseText;
subNavContent ( );
}
}
xmlhttp.open( "GET", dir + url, true );
xmlhttp.send( );
}
return;
}
Кроме того, у вас есть чрезвычайно сложный крепкий стиль для чтения, понимания, предотвращения ошибок и редактирования.