【问题标题】:displaying xml data with javascript, issue at end of function?用javascript显示xml数据,函数结束时出现问题?
【发布时间】:2013-11-08 18:24:16
【问题描述】:

尝试为未来的项目制作文本/示例页面。我希望能够一次从 xml 文档中列出一定数量的对象,并带有一个按钮来加载下一个,无论多少。有点像浏览目录。这就是我得到的,我很确定问题出在 listbythree 函数的末尾。我只是不知道如何将该功能插入页面加载时指定的 div 元素。有什么帮助吗?

<!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>

【问题讨论】:

    标签: javascript html xml


    【解决方案1】:

    您的 for 循环仅在 i&lt;3 时循环,因此它永远不会显示任何比第三个更远的元素。您可以执行以下操作来解决此问题。此外,当您的 for 循环也添加到 i 时,您的下一个按钮会将 3 添加到 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 解析更容易。

    【讨论】:

    • 是的,我知道稍后我将不得不编辑该部分,但目前该功能正在页面加载时加载,但下一个和上一个按钮应显示在三个条目下方,没有出现。由三个函数组成的列表应该被调用到底部的 div 元素,在它下面是下一个和上一个按钮。现在它只是加载函数而已。
    • 刚刚尝试了您的建议,即使有了它们,也没有显示下一个和上一个按钮
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-01
    • 2016-04-22
    • 1970-01-01
    相关资源
    最近更新 更多