Отображение XML-данных с помощью JavaScript, проблема в конце функции?

0

Попытка создать страницу текста/образца для будущего проекта. Я хочу, чтобы иметь возможность перечислять определенное количество объектов за раз из XML-документа, с помощью кнопки для загрузки следующего, как многие из них. Похоже на каталог просмотра. Вот что я получил, и я уверен, что проблема в конце функции listbythree. Я просто не знаю, как подключить эту функцию к указанному элементу div на pageload. любая помощь?

<!DOCTYPE html />
<html>
<head>

<script>
if (window.XMLHttpRequest)
  {
  xmlhttp=new XMLHttpRequest();  // code for IE7+, Firefox, Chrome, Opera, Safari
  }
else
  {
  xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");  // code for IE6, IE5
  }
xmlhttp.open("GET","books.xml",false);
xmlhttp.send();
xmlDoc=xmlhttp.responseXML; 

var i=0;
var x=xmlDoc.getElementsByTagName("book");
function listbythree()
{
    for (i;i<3;i++)
      {
      document.write("<div style='display:inline;float:left;background-color:#ffff99;padding:10px;width:300px;height:210px;margin:5px;font-size:14px;'><img style='float:left;padding-right:4px' src=");
      document.write(x[i].getElementsByTagName("cover")[0].childNodes[0].nodeValue + " />");
      document.write("<em>" + x[i].getElementsByTagName("title")[0].childNodes[0].nodeValue + "</em><br/>");
      document.write(x[i].getElementsByTagName("author")[0].childNodes[0].nodeValue + "<br/>");
      document.write(x[i].getElementsByTagName("pub")[0].childNodes[0].nodeValue + "<br/>");
      document.write(x[i].getElementsByTagName("edition")[0].childNodes[0].nodeValue + "<br/>");
      document.write(x[i].getElementsByTagName("genre")[0].childNodes[0].nodeValue + "<br/>");
      document.write("Have I Read: " + x[i].getElementsByTagName("read")[0].childNodes[0].nodeValue);
      document.write("</div>");
      }
    document.getElementById("booksbythree").innerHTML=this;
};


function next()
    {
    if (i<x.length-1)
  {
  i+3;
  listbythree();
  }
}

function previous()
{
if (i>0)
  {
  i-3;
  listbythree();
  }
}

</script>

</head>
<body onload="listbythree()">

<div id="booksbythree"></div><br/><br/>
<input type="button" onclick="previous()" value="<<" />
<input type="button" onclick="next()" value=">>" />

</body>

</html>
Теги:

1 ответ

0

В цикле for for только цикл i<3, поэтому он никогда не будет показывать какие-либо элементы, кроме третьего. Вы можете сделать следующее, чтобы исправить это. Также ваша следующая кнопка добавляет 3 к i когда ваш цикл for также добавляет i, это заставит вас пропускать 3 элемента каждый раз, когда вы нажимаете дальше.

function listbythree()
{
    var j = i+3;
    for (i;i<j&&i<x.length;i++)
    {
    ....
    }
}

function next()
{
if (i<x.length-1)
{
   listbythree();
}
}

Во второй заметке я бы посоветовал вам использовать jQuery, это упростит анализ AJAX и XML.

  • 0
    Да, я получаю, что мне придется редактировать эту часть позже, но сейчас функция загружается при загрузке страницы, но кнопки для следующей и предыдущей, которые должны отображаться под тремя записями, не отображаются. Функция list by three должна вызываться для элемента div внизу, а под ним - кнопки «Следующая» и «Предыдущая». Прямо сейчас это просто загрузка функции и ничего больше.
  • 0
    Просто попробовал ваши предложения, и даже с ними не отображаются следующие и предыдущие кнопки

Ещё вопросы

Сообщество Overcoder
Наверх
Меню