如何使用在javascript中创建的对象在html中创建表
How to create a table in html using an object created in javascript?
我已经开始从事web开发,特别是JavaScript和node.js,并创建了一个web scraper。目前,它从http://www.dotamax.com(视频游戏DOTA 2的统计页面),并创建一个对象,其中包含获胜率、拾取率和代码分配给每个英雄的任意分数。JavaScript是有效的,但现在我迷上了在网页中使用代码。我在机器上创建了一个本地web服务器,这样我就可以在html文件中使用JavaScript文件,但我不确定使用JavaScript中的对象在html中创建表的最佳方式。任何方向都会很有帮助!这是我的JavaScript文件的代码,我想放在表中的对象是heroObjs。
var request = require('request');
var cheerio = require('cheerio');
// list that will iterate through every skill level. used in the url
skillLevels = {
'Very high': 'vh',
'High': 'h',
'Normal': 'n'
};
heroes = ['pudge', 'windrunner', 'nevermore', 'earthshaker', 'lina','pudge',
'queenofpain', 'invoker', 'antimage', 'juggernaut', 'alchemist',
'doom_bringer', 'tusk', 'rubick', 'bounty_hunter', 'slark',
'storm_spirit', 'ember_spirit', 'spectre', 'spirit_breaker', 'silencer',
'legion_commander', 'lion', 'phantom_assassin', 'mirana', 'zuus',
'undying', 'rattletrap', 'templar_assassin', 'bloodseeker',
'witch_doctor', 'crystal_maiden', 'gyrocopter', 'dazzle','winter_wyvern',
'necrolyte', 'ancient_apparition', 'ogre_magi', 'skeleton_king',
'phantom_lancer', 'axe', 'magnataur', 'tiny', 'riki', 'slardar',
'earth_spirit', 'leshrac', 'furion', 'sand_king', 'omniknight',
'huskar', 'disruptor', 'tinker', 'ursa', 'bristleback', 'sniper',
'venomancer', 'nyx_assassin', 'life_stealer', 'clinkz', 'vengefulspirit',
'skywrath_mage', 'kunkka', 'lich', 'faceless_void', 'dark_seer', 'techies',
'jakiro', 'abaddon', 'phoenix', 'sven', 'shadow_shaman', 'luna', 'viper',
'enigma', 'shredder', 'weaver', 'tidehunter', 'night_stalker', 'medusa',
'chaos_knight', 'puck', 'drow_ranger', 'centaur', 'keeper_of_the_light',
'pugna', 'dragon_knight', 'warlock', 'morphling', 'broodmother','meepo', 'terrorblade', 'treant', 'razor', 'bane', 'batrider',
'death_prophet', 'troll_warlord', 'wisp', 'shadow_demon', 'naga_siren',
'obsidian_destroyer', 'enchantress', 'lone_druid', 'beastmaster',
'lycan', 'oracle', 'brewmaster', 'elder_titan', 'visage', 'chen'
];
// creates a multidimensional object that holds hero stats
var heroObjs = {};
for (var i = 0; i < heroes.length; i++) {
var hero = heroes[i];
if (hero in heroObjs == false) {
heroObjs[hero] = {
"Very high": {
"Pick Rate": null,
"Win Rate": null,
"Score": null
},
"High": {
"Pick Rate": null,
"Win Rate": null,
"Score": null
},
"Normal": {
"Pick Rate": null,
"Win Rate": null,
"Score": null
},
};
}
}
for (skills in skillLevels) {
var url = "http://www.dotamax.com/hero/played/?skill=" + skillLevels[skills];
request(url, (function (skills) {
return function (err, resp, body) {
if (err)
throw err;
$ = cheerio.load(body);
//creates the score and gets win rate and pick rate from dotamax.com
//currently only fills score for very high skill bracket
$("tbody tr").each(function (hero) {
$(this).find('td div:contains("%")').each(function () {
var containsPickRate = $(this).parent().parent().find("td").eq(1).toString();
var containsHeroName = $(this).parent().parent().toString();
var pickRateIndex = containsPickRate.indexOf('10px">') + 6;
var endPickRateIndex = containsPickRate.indexOf('</div>');
var heroNameIndex = containsHeroName.indexOf("detail/") + 7;
var endHeroNameIndex = containsHeroName.indexOf('')" style');
var heroName = containsHeroName.substring(heroNameIndex, endHeroNameIndex);
var pickRate = containsPickRate.substring(pickRateIndex, endPickRateIndex);
pickRate = pickRate.split(',').join("");
var winRate = parseFloat($(this).text());
pickRate = parseFloat(pickRate);
if (heroName in heroObjs == true) {
heroObjs[heroName][skills]["Pick Rate"] = pickRate;
heroObjs[heroName][skills]["Win Rate"] = winRate;
if (skills === "Very high") {
var winRateCont = 1.4 * .01 * Math.pow(winRate, 2)
var pickRateCont = .8 * ((10775 / (100 + 1090 * Math.pow(Math.E, -.000005 * pickRate))) - 8.3)
heroObjs[heroName][skills]["Score"] = (pickRateCont + winRateCont)
}
}
})
});
}
})(skills));
}
//waits 10 seconds to display heroObjs which is approximate time
//it takes for the previous function to fill heroObjs
setTimeout(function () {
console.log(heroObjs);
}, 10000);
首先,您的最佳选择是使用一个已建立的Javascript框架来为您实现这一点。例如,jQuery和/或angular.js.
例如,使用angular.js,您只需执行以下操作:
<table>
<tr data-ng-repeat="hero in heroObjs">
<td>{{hero.attr1}}</td>
</tr>
</table>
Angular将负责其余的工作。它将解析您的数据,并为您构建html。理解angular或jQuery这样的框架需要一段时间,但时间花得很好。维护您自己的函数库来执行类似的操作是一种巨大的时间浪费,而且您将花费更多的时间进行调试而不是构建。
相关文章:
- 从Javascript和Php变量创建Html模板文档
- 为非列表项目创建HTML实时搜索
- 使用javascript动态创建html内容/元素
- 如何使用jQuery动态创建HTML输入
- 在 JQUERY 中创建 HTML 后,Jquery 方法不起作用
- 使用HTML标记中的JS变量在Javascript中动态创建HTML
- 如何使用jQuery和乘法行和列创建HTML表
- MVC 4:使用 JQUERY 和 PartViewResult 动态创建 HTML 文本框.如果代码是动态添加的,如何
- 如何将函数绑定到使用链接函数创建 HTML 的角度指令
- 我需要使用AngularJS从JSON文件创建HTML元素
- 从Ajax Arraybuffer响应类型创建HTML画布
- 创建HTML对象的Javascript与创建HTML字符串的比较
- 在动态创建html元素之后,是否可以触发事件
- 如何在动态创建html时实现分层标题组织
- 如何从输入到url的路径创建html文件
- 从sql server中用javascript创建HTML表
- 如何在表单中创建html元素,而无需重新加载页面
- 做全栈JavaScript框架在客户端或服务器上创建HTML
- 使用JQuery创建HTML父标记
- 在服务器端创建html元素VS将数据作为JSON获取,并使用javascript创建标签