Javascript 如何创建并链接到基于对象的动态页面?

Javascript 如何创建并链接到基于对象的动态页面?,javascript,html,Javascript,Html,我刚刚了解了如何从Mongo数据库中读取对象并在表中显示它们 for (i = 0; i<teamlist.count;) { strTeam = strTeam + "<tr><td><a href=''>" + teamlist.teams[i].teamName + "</td></tr>"; i = i+1; } strTeam = "<table border='1'>" + strTeam

我刚刚了解了如何从Mongo数据库中读取对象并在表中显示它们

for (i = 0; i<teamlist.count;) {
    strTeam = strTeam + "<tr><td><a href=''>" + teamlist.teams[i].teamName + "</td></tr>";
    i = i+1;
}
strTeam = "<table border='1'>" + strTeam + "</table>"

for(i=0;ifirst:a'-元素的href属性是空的,因此链接当然不会带你去任何地方

您使用服务器端的什么技术?当然您可以“动态”创建页面,但您首先必须实现此类页面的原型,然后让其在调用时从链接获取数据。团队的数据必须存储在某个位置(例如数据库)并由页面检索以供显示

如果使用php,可以通过$\u传递每个团队的单个数据,如下所示:

<a href="page.php?team=foo">see foo</a>  
小心服务器端应用程序上用户提供的数据!

在使用这些变量之前,您应该以某种方式验证这些$\u GET变量;只需使用google进行SQL注入。

因为下面的代码将显示,使用JavaScript生成html是一种痛苦。如果它变得更加完整,也许您应该用google搜索mustache模板

我假设您正在现代浏览器上尝试此操作,并且您的团队列表包含某些信息,如果您需要更多帮助,请告诉我

尝试编写代码时的一个技巧是使用console.log。在Chrome或Firefox中使用firebug插件时,可以按F12打开开发工具。它应该在控制台选项卡中打开。记录对象时,可以在控制台中单击它并检查对象的详细信息

teamlist = {};
teamlist.teams=[
  {teamName:"team one",teamDetail:"team one details"},
  {teamName:"team two",teamDetail:"team two details"}
];
console.log("teamlist is now:",teamlist);
var myapp =  myapp || {};//innit myapp namespace
myapp.createTable=function(){
  var df = document.createDocumentFragment(),
  table = document.createElement("table"),
  i = 0,row,cel;
  while(i<teamlist.teams.length){
    cel = this.cel(teamlist.teams[i]);
    row = this.row();
    row.appendChild(cel);
    table.appendChild(row);
    i++;
  }
  table.onclick=this.toggleDetails;
  document.body.appendChild(table);
};
myapp.row = function(){
  return document.createElement("tr");
};
myapp.cel = function(paramObj){
  var cel = document.createElement("td"),//<=notice the comma, adding
     //more variables without having to specify "var"
  detail = document.createElement("div");
  detail.appendChild(document.createTextNode(paramObj.teamDetail));
  detail.style.display="none";
  detail.style.position="relative";
  detail.style.top="10px";
  detail.style.left="-50px";
  detail.style.backgroundColor="#AAAAAA";
  cel.appendChild(document.createTextNode(paramObj.teamName));
  cel.appendChild(detail);
  return cel;
};
myapp.toggleDetails = function(e){
  if(e.target.tagName!=="TD")
    return;
  var details = e.target.getElementsByTagName("div")[0];
  var visible = details.style.display;
  visible = (visible==="inline")?"none":"inline";
  details.style.display=visible;
};
myapp.createTable();
teamlist={};
团队列表=[
{teamName:“一队”,teamDetail:“一队详情”},
{团队名称:“第二团队”,团队细节:“第二团队细节”}
];
log(“团队列表现在是:”,团队列表);
var myapp=myapp | |{};//innit myapp名称空间
myapp.createTable=函数(){
var df=document.createDocumentFragment(),
table=document.createElement(“表”),
i=0,行,cel;

然而(我想团队是否已经有了自己的页面可以链接?或者你的问题真的是关于路由的(而不是javascript和HTML)?我没有创建他们自己的页面。我觉得这可以动态完成?你可以动态完成,但你需要一个url,该url将显示团队详细信息或发送JSON数据,以便你的脚本可以获取。如果你的团队列表对象中已经有团队详细信息,你不需要为此重新连接到服务器。谢谢伟大的答案。
teamlist = {};
teamlist.teams=[
  {teamName:"team one",teamDetail:"team one details"},
  {teamName:"team two",teamDetail:"team two details"}
];
console.log("teamlist is now:",teamlist);
var myapp =  myapp || {};//innit myapp namespace
myapp.createTable=function(){
  var df = document.createDocumentFragment(),
  table = document.createElement("table"),
  i = 0,row,cel;
  while(i<teamlist.teams.length){
    cel = this.cel(teamlist.teams[i]);
    row = this.row();
    row.appendChild(cel);
    table.appendChild(row);
    i++;
  }
  table.onclick=this.toggleDetails;
  document.body.appendChild(table);
};
myapp.row = function(){
  return document.createElement("tr");
};
myapp.cel = function(paramObj){
  var cel = document.createElement("td"),//<=notice the comma, adding
     //more variables without having to specify "var"
  detail = document.createElement("div");
  detail.appendChild(document.createTextNode(paramObj.teamDetail));
  detail.style.display="none";
  detail.style.position="relative";
  detail.style.top="10px";
  detail.style.left="-50px";
  detail.style.backgroundColor="#AAAAAA";
  cel.appendChild(document.createTextNode(paramObj.teamName));
  cel.appendChild(detail);
  return cel;
};
myapp.toggleDetails = function(e){
  if(e.target.tagName!=="TD")
    return;
  var details = e.target.getElementsByTagName("div")[0];
  var visible = details.style.display;
  visible = (visible==="inline")?"none":"inline";
  details.style.display=visible;
};
myapp.createTable();