使用Javascript创建可重复的HTML表

时间:2012-06-12 20:11:55

标签: javascript jquery html xml

我需要创建多个保存数据的表。所有表都包含相同的字段,但每个表的数据都是使用jQuery和Javascript从XML文件中解析出来的。目前我的设置是用HTML创建我的格式化表格,其中“id”字段标识XML数据的放置区域。例如......

主要HTML:

<body id="top">
</body>

模板HTML:

<table id="sectionTable" border="1" cellpadding="10" cellspacing="1" width="100%">
    <tr><td id="information"></td></tr>
</table>

加载模板的Javascript:

$('#top').load('template.html #sectionTable');

这将在HTML文件(在本例中为template.html)中使用ID为“sectionTable”的元素,并将其插入到ID为“top”的元素的主体中,这是html页面的主体。

将XML数据放入表格的Javascript: 我能够很好地解析和存储XML数据,然后将其存储到变量中。然后我将此数据附加到适当的html ID标记...

var title = <from XML>; //Lets say in this case title="My Stack Title"

...

$(#information).append(title);

生成的HTML:

<table id="sectionTable" border="1" cellpadding="10" cellspacing="1" width="100%">
    <tr>
       <td id="information">My Stack Title</td>
    </tr>
</table>

这种方法的问题在于,当我循环遍历XML的多个部分并使用这种技术时,它不会创建新的HTML表,而是覆盖现有数据,因为我使用相同的ID。

我知道通过使用DOM对象我可以解决这个问题,但我的问题是,尽管这是一个简单的例子,我的表格非常复杂,有多个级别,样式等。这将是很多对象适当地创建并嵌套在一起,这对于其他用户来说将来很难改变(很可能)。使用模板方法可以很容易地跟踪所有内容。如果有一种方法可以根据XML数据中的迭代索引在HTML中放置唯一ID,那么它可以解决问题,但我还没弄清楚如何实现这一点。

有什么建议吗?谢谢!

2 个答案:

答案 0 :(得分:2)

尝试将您的id =“information”更改为类,然后遍历“信息”类的每个元素。

$('.information').each(function(n,c){
 $(this).append(title);
})

使用id只会查询该id的第一个元素。没试过这个,但试一试。

答案 1 :(得分:1)

你不应该在文档中有两个具有相同ID的元素 - HTML规范说只能有一个。正如LCIII建议的那样,使用类。您可以使用jQuery的.first()和.last()函数检索具有特定类名的第一个和最后一个元素:

$('.information').last().append(title);

如果要在其他类型的表之后添加新表,可以这样做:

$('.information').first().clone().insertAfter($('.information').last()).append(title);

(在英语中:克隆第一个信息表,将其插入到最后一个信息表之后,并将标题附加到它。当然,它没有指定表,但是如果每个.information都是一个表...)< / p>

代替.append(title),你可以做任何你需要的事情来覆盖新表中的数据。