我有一个XML文档(如下):
<?xml version="1.0" encoding="UTF-8"?>
<testimonials>
<testimonial user="User Name 1" state="1" comment="Comment 1"></testimonial>
<testimonial user="User Name 2" state="2" comment="Comment 2"></testimonial>
<testimonial user="User Name 3" state="3" comment="Comment 3"></testimonial>
<testimonial user="User Name 4" state="4" comment="Comment 4"></testimonial>
<testimonial user="User Name 5" state="5" comment="Comment 5"></testimonial>
</testimonials>
我通过jQuery ajax调用获取此数据。现在我想在一个框(#xmlFeed)中显示它并淡入和淡出到下一个节点。它应该显示为让我们说它在移动到下一个节点之前几秒钟,再次淡入和淡出。
到目前为止,我的代码正在下面工作,但我无法让循环和淡入淡出正常工作。代码如下:
<!doctype html>
<html>
<head>
<title></title>
</head>
<body>
<div id="container">
<div id="xmlFeed"></div>
</div>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.4/jquery.min.js"></script>
<script>
$(function(){
//Initial load
getXML();
});
getXML = function(){
$.ajax({
type: "GET",
url: "xml/xmlFeed.xml",
dataType: "xml",
success: function(xml){
var data = $( xml );
var findTestis = data.find("testimonial");
findTestis.each(function(i){
name = this.getAttribute("user");
state = this.getAttribute("state");
comment = this.getAttribute("comment");
contents = " <div id='listing" + i + "'>"
+ "<p><strong>" + comment + "</strong></p>"
+ "<p>" + name + ", " + state + "</p>"
+ "</div>";
setTimeout(function(){
$("#xmlFeed").html(contents);
}, 2000 * i );
});
}
});
}
</script>
</body>
目前它正在工作并进行显示,但它只是反复显示最后一个节点的内容。我猜我需要更新这些增量或其他内容。可以将其视为RSS sytle功能。
感谢您的帮助,请举例说明。
答案 0 :(得分:0)
每个函数中的“i”可能指的是键而不是索引。由于您的对象是一个节点,因此它可能会将其视为一个地图。在这种情况下,您的超时“2000 * i”将不会产生数值(或0),这就是您最后一个节点将始终显示的原因 - 它们全部同时执行但按顺序执行。
参见示例:http://jsfiddle.net/nVdhf/2/
并看到他们的两个数组与地图http://api.jquery.com/jQuery.each/
的例子有所不同答案 1 :(得分:0)
你的问题是你没有等到第一个超时完成,然后再转到下一个超时。您需要以某种方式转到setTimeout方法的回调中的下一个。
答案 2 :(得分:0)
我怀疑发生了什么事:
contents
设置为最后一个节点的值,而$('#xmlFeed').html
只是设置为该值。http://jsfiddle.net/cori/PrVRc/1/的某些内容证明了我认为你要做的事情(只是经过轻微测试)。
答案 3 :(得分:-1)
自己想出来并制作了一个自定义插件来启动。感谢所有帮助,但所有答案都无关紧要。科里你最接近这个标志,但仍然不是我追求的。欢呼声。