我有一个Jquery脚本,它加载XML文件并吐出内容。但是,我想将这些内容格式化为一个表,每行3列。目前,它有一个很长的行,我没有在google上找到任何关于在.each加载了几个项目之后调用新函数的内容。
重申一点,我想在之后执行 function newrow() if(hideproduct ==“”){} 已成功执行3次。
var product_xml = "xml/products_loaded.xml"
function xmlParser() {
$.ajax({
type: "GET",
url: product_xml,
dataType: "xml",
success: function(xml) {
function newrow(){
$("#output").append("</tr><tr>")
}
$(xml).find("SAVED_EXPORT").each(function(){
var productcode = $(this).find("productcode").text()
var productname = $(this).find("productname").text()
var productprice = $(this).find("productprice").text()
var hideproduct = $(this).find("hideproduct").text()
if(hideproduct == ""){
$("#output").append("<td class='product' id='" + productcode + "'>"
+ "<a href='/i/" + productcode + ".htm' title='" + productname + ", " + productcode + "'>" + productname + "</a><br>"
+ "<span><font class='text colors_text'><b><span class='price'>Our Price</span>: </b></font> $" + productprice + "</span><br>"
+ "<img src='/v/vspfiles/photos/" + productcode + "-1.jpg' border='0' alt='" + productname + "'>"
+ "</td>");;
}
})
}
})
}
提前感谢任何想知道如何解决这个问题的人。
答案 0 :(得分:2)
关键是你需要一个.each
之外的计数器变量来存储状态:
var count = 0;
因为您无法使用var
回调函数中的本地.each
声明来存储状态变量。
然后,在if (hideproduct ...)
块内,计算它被调用的次数:
++count;
如有必要,请调用函数
if (count === 3) {
newRow();
count = 0;
}
碰巧您的newRow()
功能无法正常工作,因为您无法使用.append
创建不平衡的HTML代码。
更好的解决方案是:
var tr = null;
var count = 0;
$(xml).find("SAVED_EXPORT").each(function() {
if (hideproduct === "") {
if (tr === null) { // create a new row
tr = $('<tr>').appendTo('#output');
}
tr.append(...); // add your content
if (++count % 3 === 0) {
tr = null; // force a new <tr> on the next iteration
}
}
});
请注意,只有在必要时才会创建新的<tr>
,然后<td>
元素中的新内容会直接添加到#output
元素中,而不会添加到{{1}}。
答案 1 :(得分:0)
这个怎么样?
var i = 1;
$(xml).find("SAVED_EXPORT").each(function(){
[...]
if(hideproduct == ""){
[...]
if(i%3 == 0)
newRow();
i++;
}
});
我不确定你想要测试“3-test”的确切位置,但你明白了!基本上,i%3 == 0测试将检查我是否是3(0,3,6,9 ...)的倍数。