获取按钮,显示XML文件中循环的下一次迭代
Getting button to show next iteration of loop from XML file
好的,这就是我要做的。我有一个XML文件,其中包含1000个分类广告为我的雇主,他希望能够有每个广告一次显示一个项目。我已经加载了XML文件,可以让它发布第一个广告,但我不知道如何让它去到循环中的下一个项目或倒退,这是我遇到的麻烦。下面是尝试前进的代码。
var x=xmlDoc.getElementsByTagName("item");
for (i=0;i<x.length;i++) {
x= x[i].getElementsByTagName("description")[0].childNodes[0].nodeValue;
break;
}
document.getElementById("classified").innerHTML =x;
function forward() {
var text ="";
var x=xmlDoc.getElementsByTagName("item");
for (i=0;i<x.length;i++) {
x= x[i].getElementsByTagName("description")[0].childNodes[0].nodeValue;
continue;
}
document.getElementById("classified").innerHTML = x;
}
那么我要做的就是点击一个按钮我可以获取下一个要发布的广告并删除第一个带有前进按钮的广告让后退按钮做相反的事情
您可以将所有广告的描述存储在数组中,并记住当前索引(显示的那个)。演示。
示例代码。我假设你在页面的某个地方有两个id为back/forward的按钮。
var fakeAds = Array.apply(null, new Array(1000)).map(function(_, i){
return 'some random text ' + (i+1);
}), //replace with actual data
idx = 0, //current index
display = document.getElementById('display'), //where to show
total = fakeAds.length; //total number of ads
function show() { //actually show ad at current idx.
display.innerHTML = fakeAds[idx];
}
document.getElementById('back').addEventListener('click', function(){
--idx < 0 && (idx = total - 1); //decrement index and show
show();
});
document.getElementById('forward').addEventListener('click', function(){
idx = ++idx%total; //increment index and show
show();
});
show(); //do show starting index.
以下是您需要的两个函数:DEMO
从您的代码中,这是如何首先从XML文件中提取所有item
,然后通过循环从它们中获得每个description
。这将生成一个存储在x
var中的列表。
这会在XML文件中创建一个包含所有item元素的列表(这是下面的完整方法)
var connectXMLFile = new XMLHttpRequest();
定义打开哪个文件并发送请求
connectXmlFile.open("GET","PathToYourXMLFile.xml", false);
connectXMLFile.setRequestHeader("Content-Type", "text/xml");
connectXMLFile.send(null);
获取响应和所有item
元素
var xmlDoc = connectXMLFile.responseXML;
var x=xmlDoc.getElementsByTagName("item");
表示您得到的广告列表
var adsList = [];
然后循环获取每个description
并将其添加到列表
for (var i=0;i<x.length;i++) {
adsList.push(x[i].getElementsByTagName("description")[0].childNodes[0].nodeValue);
}
表示当前显示的广告
var adNumber = 0;
function forward() {
if (adNumber >= adsList.length) adNumber = 0;
document.getElementById("ad").innerHTML = adsList[adNumber];
adNumber++;
}
function backwards() {
if (adNumber == 0) adNumber = adsList.length;
document.getElementById("ad").innerHTML = adsList[adNumber - 1];
adNumber--;
}
这是基于您提供的代码,如果您需要任何解释,请随时询问。
相关文章:
- 如果30秒未单击,请应用CSS一次,将其删除,然后重新迭代
- JS迭代一个数组,同时更改另一个数组
- 在js中迭代一个数组,同时只将整数复制到另一个数组
- 当接收到AJAX内容时,每次$.的下一次迭代
- 为什么这个 JavaScript switch 语句(在 for 循环内)保留了上一次迭代的值
- 异步mongodb更新循环中最后一次迭代后的重定向
- for循环只迭代一次
- 使用 promises/dedelay 异步迭代一组文件
- 当我将src附加到图像时,每N秒迭代一次
- 当试图从元素中删除类时,For循环只迭代一次
- 不能让.offset()方法在迭代一组列表项时工作
- 每个函数在XML中迭代两次
- 对对象数组只迭代一次
- Javascript - for循环只迭代一次
- Angular ng-option:迭代一个数字数组,以显示另一个数组的内容,但在ng-model中选择了索引
- 迭代一个数并按降序排列
- 迭代一周中的每一天
- 迭代一次的行值并添加
- 自定义JSON.stringify不能对整个对象进行stringify,但在迭代一层时有效
- JavaScript在同一循环中每x次迭代一次循环