科百科
当前位置: 首页 范文大全

javascript怎么创建html(使用JavaScript创建可排序的)

时间:2023-06-04 作者: 小编 阅读量: 4 栏目名: 范文大全

数据排序是指将数据按照指定的值,按升序或降序排列。在本教程中,我们将使用JavaScript将来自模拟JSON响应的数据显示到HTML表中。表格内容的单元格将使用来自我们JSON响应的数据通过JavaScript添加。表格可能存在单元格重叠问题或超出整页边界。map方法在数组中的每个项目上执行我们传递给它的函数。在这个map函数中,我们为数组中的每个项目创建一个新单元格,并将单元格innerHTML设置为相应的对象键值。

javascript怎么创建html?在网站上显示数据时,提供使用户更容易浏览数据的功能非常重要其中一项功能是对数据进行排序的能力,接下来我们就来聊聊关于javascript怎么创建html?以下内容大家不妨参考一二希望能帮到您!

javascript怎么创建html

在网站上显示数据时,提供使用户更容易浏览数据的功能非常重要。其中一项功能是对数据进行排序的能力。

数据排序是指将数据按照指定的值,按升序或降序排列。我们可以使用 JavaScript 在网站的客户端手动处理数据排序。如果您在静态网站上工作或从服务器中删除排序数据的冲击,这将特别有用。

在本教程中,我们将使用 JavaScript 将来自模拟 JSON 响应的数据显示到 HTML 表中。我们还将包括根据表头中的值使表可排序的功能。

下面来看看成品。单击任何表格标题以对表格进行相应的排序。

1.用 HTML 放置内容

<table>标签是用于在网页上显示数据的语义 HTML 标签。我们将把我们的<table>标签放在一个表格容器 div 中,这将允许我们在 CSS 中包含一些响应式样式。

<div >

<table >

</table>

</div>

我们的表格将包含表格标题、thead表格内容、tbody标签。在我们的表格标题中,我们将在每个th单元格中包含用于处理排序功能的按钮。表格内容的单元格将使用来自我们 JSON 响应的数据通过 JavaScript 添加。

<div >

<table >

<thead>

<tr>

<th><button >Name</button></th>

<th><button >Type</button></th>

<th><button >HP</button></th>

<th><button >Attack</button></th>

<th><button >Defense</button></th>

<th><button >Sp. Attack</button></th>

<th><button >Sp. Defense</button></th>

<th><button >Speed</button></th>

<th><button >Total</button></th>

</tr>

</thead>

<tbody ></tbody>

</table>

</div>

2.使用 CSS 制作响应式表格

使用 HTML 表格时更常见的问题之一是缺乏响应能力。表格可能存在单元格重叠问题或超出整页边界。

我们可以通过将表格放置在一个表格容器中来解决这些问题,该表格容器是具有溢出滚动属性的整个页面的宽度。这样,表格总是只有整页宽,并且由于可滚动溢出,无需缩小单元格。我们还将在表格单元格中包含 min-width 属性以避免文本换行。

表格溢出视口而不被压扁

这是使我们的表格可滚动所需的 CSS:

.table-container {

width: 100%;

overflow: scroll;

}

table {

width: 100%;

}

然后我们可以添加其余的样式:

.table-container {

margin: auto;

max-width: 1200px;

min-height: 100vh;

overflow: scroll;

width: 100%;

}

table {

border-collapse: collapse;

width: 100%;

}

thead tr {

border-bottom: 1px solid #ddd;

border-top: 1px solid #ddd;

height: 1px;

}

th {

font-weight: bold;

height: inherit;

padding: 0;

}

th:not(:first-of-type) {

border-left: 1px solid #ddd;

}

th button {

background-color: #eee;

border: none;

cursor: pointer;

display: block;

font: inherit;

height: 100%;

margin: 0;

min-width: max-content;

padding: 0.5rem 1rem;

position: relative;

text-align: left;

width: 100%;

}

tbody tr {

border-bottom: 1px solid #ddd;

}

td {

padding: 0.5rem 1rem;

text-align: left;

}

3.将 JSON 数据放入 HTML 表中

对于此示例,我们将使用模拟解析的 JSON 响应。这是我们的数据的样子:

const response = {

"pokedata": [

{

"name": "Bulbasaur",

"type": "Grass",

"hp": 45,

"attack": 49,

"defense": 49,

"spAttack": 65,

"spDefense": 65,

"speed": 45,

"total": 318

},

...

]

}

我们将把数据放在我们的<tbody >标签中,以便我们在 JavaScript 中定位该元素;

const tableContent = document.getElementById("table-content")

行内容将基于我们的response.pokedata. 让我们定义一个基于对象数据创建新行的函数:

const createRow = (obj) => {

const row = document.createElement("tr");

const objKeys = Object.keys(obj);

objKeys.map((key) => {

const cell = document.createElement("td");

cell.setAttribute("data-attr", key);

cell.innerHTML = obj[key];

row.appendChild(cell);

});

return row;

};

在这个函数中,我们使用Object.keys()方法来获取对象键作为一个数组。这是返回值的样子:

Object.keys() 返回一个包含对象键的数组

一旦我们获得了对象键的数组,我们就使用该.map()方法遍历每个键。map 方法在数组中的每个项目上执行我们传递给它的函数。

在这个 map 函数中,我们为数组中的每个项目创建一个新单元格,并将单元格 innerHTML 设置为相应的对象键值。

使用键数组映射对象

最后,我们使用该方法将我们创建的单元格附加到函数开头定义的行中.appendChild()。

现在我们有了行创建函数,我们将定义一个函数来循环遍历response.pokedata数组并将每个新行附加到我们的tableContent元素。

const getTableContent = (data) => {

data.map((obj) => {

const row = createRow(obj);

tableContent.appendChild(row);

});

};

我们将把我们的getTableContent函数传递给一个事件监听器,以便在页面加载后将内容添加到表中。

window.addEventListener("load", () => {

getTableContent(response.pokedata);

});

4.使用 JavaScript 对数据进行排序

现在我们已经创建了表格,让我们添加排序功能。在我们的 HTML 中,我们在标题单元格中包含按钮,这些按钮将对象键作为其 id。现在让我们定位这些按钮:

const tableButtons = document.querySelectorAll("th button");

我们希望根据单击的按钮对数据进行排序,并且还包括一个在单击按钮时切换排序方向(升序或降序)的功能。

我们可以使用该.sort()方法对response.pokedata数组中的数据进行排序。sort 方法接受一个比较两个不同参数的函数,并根据函数响应对它们进行排序:

> 0排序 a 后 b

< 0a先排序b

=== 0a保持和的原始顺序b

compareFunction(a, b) 返回值排序

来源:MDN

关于 sort 方法需要注意的另一件事是它会改变它所操作的原始数组。这意味着它改变了我们原始数组的值。

使用 .sort() 时的数组突变

我们可以通过使用扩展语法来避免改变我们的原始数组[...]

使用扩展语法避免数组变异

现在我们可以创建排序函数了。这就是我们排序函数的逻辑:

  1. 清除 tableContent 元素中的内容
  2. 根据选择的参数和方向对数据进行排序
  3. getTableContent使用函数将排序后的数据附加到我们的 tableContent

const sortData = (data, param, direction = "asc") => {

tableContent.innerHTML = '';

const sortedData =

direction == "asc"

? [...data].sort(function (a, b) {

if (a[param] < b[param]) {

return -1;

}

if (a[param] > b[param]) {

return 1;

}

return 0;

})

: [...data].sort(function (a, b) {

if (b[param] < a[param]) {

return -1;

}

if (b[param] > a[param]) {

return 1;

}

return 0;

});

getTableContent(sortedData);

};

我们的排序函数接受三个参数:

  • data:要排序的数组
  • param:用于对数组进行排序的值
  • direction: 按升序或降序对数组进行排序。默认参数值设置为“asc” 。

    我们通过将 innerHTML 设置为空白字符串来清除 tableContent 元素中的内容。然后我们使用.sort()方法和direction参数来确定数据应该如何排序。我们反转比较函数以便按降序排序。以这种方式使用比较函数可以让我们对数据进行排序,而不考虑类型值(字符串、整数、浮点数等)

    最后,我们将sortedData作为新值传递给我们的表格内容。

    现在我们将排序函数传递给表格按钮的单击事件侦听器,并处理切换排序方向。

    window.addEventListener("load", () => {

    getTableContent(response.pokedata);

    [...tableButtons].map((button) => {

    button.addEventListener("click", (e) => {

    if (e.target.getAttribute("data-dir") == "desc") {

    sortData(response.pokedata, e.target.id, "desc");

    e.target.setAttribute("data-dir", "asc");

    } else {

    sortData(response.pokedata, e.target.id, "asc");

    e.target.setAttribute("data-dir", "desc");

    }

    });

    });

    });

    在这个函数中,我们通过data-dir在按钮上设置一个属性来确定排序方向来处理切换。我们还将更新我们的 CSS 以根据排序方向在按钮旁边显示一个图标:

    th button::after {

    position: absolute;

    right: 0.5rem;

    }

    th button[data-dir="asc"]::after {

    content: url("data:image/svg xml,");

    }

    th button[data-dir="desc"]::after {

    content: url("data:image/svg xml,");

    }

    我们不希望图标显示在所有先前单击的按钮上,因此我们将定义一个resetButtons函数,该函数删除任何未单击按钮的按钮上的 data-dir 属性。

    const resetButtons = (event) => {

    [...tableButtons].map((button) => {

    if (button !== event.target) {

    button.removeAttribute("data-dir");

    }

    });

    };

    我们将该函数传递给我们的按钮事件侦听器,以在单击新按钮时重置以前的按钮

    window.addEventListener("load", () => {

    getTableContent(response.pokedata);

    [...tableButtons].map((button) => {

    button.addEventListener("click", (e) => {

    resetButtons(e);

    if (e.target.getAttribute("data-dir") == "desc") {

    sortData(response.pokedata, e.target.id, "desc");

    e.target.setAttribute("data-dir", "asc");

    } else {

    sortData(response.pokedata, e.target.id, "asc");

    e.target.setAttribute("data-dir", "desc");

    }

    });

    });

    });

    结论

    这样,我们就完成了!我们只使用原生 JavaScript 创建了一个可排序的表!

    • 推荐阅读
    • 包法利夫人形象分析(包法利夫人是怎样的形象)

      包法利夫人形象分析?包法利夫人的形象前后分为两个阶段,前期的她热情美丽纯洁,是个没有见过世面的弱女子,农村姑娘,对未来充满美好的幻想;后期的她却变成腐化生活的追求者,最后走向毁灭,是一个为社会所毁灭的小资产阶级女性形象而这其中的变化却是社会环境所造成的,今天小编就来聊一聊关于包法利夫人形象分析?包法利夫人的少女情怀受文学作品感染一触即发,一发不可收拾,正是合乎情理之中。

    • 极海听雷之重启三叔找到了吗(重启之极海听雷三叔从十一仓出去了吗)

      按照规定,现在十一仓的管理者,应该是吴邪的二叔吴二白。二叔在《重启》中是代替三叔保护吴邪的人。但是并没有交代吴三省真正的下落。吴邪推断王俊义一定掌握了很多三叔的资料,所以把他骗到十一仓来替王俊义查X人员的事,目的就是要打破X人员计划。吴邪知道自己生命有限,用白昊天自己的原话调侃她,之所以有一些事情没有告诉她,不是骗她而是没有说。在最后的调查中,发现那个偷盗货物的人是丁主管。

    • 知画被揭穿阴谋(新版还珠的知画为什么很不受待见)

      两人的出生也是有区别的,比如欣荣能做皇后而知画却不能。欣荣是永琪原配妻子,小燕子虽然和永琪两情相悦,但小燕子的确是第三者。而知画名义上是永琪的原配,其实一直都是以第三者的身份存在。欣荣不懂得如何抓住永琪的心。知画步步为营,几乎所有人都被他欺骗了。老版的知画手段太厉害,她能让所有人喜欢她。知画她的聪明,心机城府很难被人取代,而欣荣宦官之女中一抓一大把,很轻易地就被取代了。

    • 月球是和地球一样大吗(和月球相比地球有多大)

      在此期间,航天器至少飞行了38.64万公里,这是地球和月球之间的距离。水星是太阳系八颗行星中最小的。需要18个以上的水星才能装满地球。澳大利亚,澳大利亚比月亮还宽,澳大利亚的长度比月球的直径长600千米。这颗卫星的直径为3400公里,而澳大利亚从东到西约为4000公里。美国、苏联和中国是已经成功地将航天器送上月球的三个国家。天文学家称之为“潮汐锁定”状态,因为它现在将保持这个速度。

    • 爬虾怎么做好吃(皮皮虾吃法大全)

      爬虾怎么做好吃盐水皮皮虾食材:皮皮虾2斤,食盐15克,八角3颗,花椒20颗,香叶3片。辣炒皮皮虾食材:皮皮虾2斤,尖椒1个,红尖椒1个,香菜适量,油适量,食盐1茶匙,葱适量,姜1块,蒜4瓣,料酒2汤勺,生抽1汤勺,辣酱1茶匙。

    • 教资面试成绩什么时候出(教资面试成绩公布时间)

      接下来我们就一起去了解一下吧!教资面试成绩什么时候出2021年上半年面试报名时间:4月15-18日,面试日期:2021年5月15-16日。上半年教资面试成绩一般在6月份公布,下半年一般在次年的3月份公布,具体时间考生可关注中小学教师资格考试网查询成绩公布时间。

    • 月子吃什么好恢复身体(产后吃什么恢复好)

      下面希望有你要的答案,我们一起来看看吧!月子吃什么好恢复身体产后的第一餐饮食应首选易消化、营养丰富的流质食物。如糖水煮荷包蛋、冲蛋花汤、藕粉等。产后第二天就可以吃一些软食或普通饭菜了。产后5-7天应以米粥、软饭、烂面、蛋汤等为主食。不要吃过多油腻之物,如鸡、猪蹄等。产后7天以后胃纳正常,可以进步鱼、肉、蛋、鸡等。

    • 韭花饼是怎么做的(韭花的营养价值)

      韭花饼是怎么做的韭花饼的做法:先把鸡蛋用打蛋器打散,加入少许食盐后搅匀。锅里预热,加入少许菜籽油,油要稍微的少一些。韭花营养丰富,富含维生素、蛋白质、钙、磷、铁、胡萝卜素、核黄素、抗坏血酸等多种有益人体健康的物质,既是美食又有着十分广泛的食疗价值。

    • 七龙珠顺序介绍(七龙珠剧情简要说明)

      七龙珠顺序介绍剧情顺序:《七龙珠》、《龙珠Z》、《龙珠超》、《七龙珠GT》。独自住在深山的少年孙悟空,遇上搜集七龙珠的少女科学家布尔玛,布尔玛为得到悟空拥有的四星七龙珠而带同悟空踏上找寻七龙珠的旅程。是《龙珠》系列中的第二部,故事发生于“龙珠”后五年的世界,讲述悟空和伙伴们保卫地球的故事。故事发生于“龙珠Z”5年后的世界。东映动画公司得到集英社授权,由此制作播放了《龙珠Z》世界的续集。

    • 什么品牌的机油既经济又好用(测评报告什么样的好机油)

      检测结果显示在5W-30这个黏度等级中,日产原厂机油低温冷车启动性能最佳,现代原厂机油和嘉实多磁护机油较差。检测结果显示20款机油的泡沫特性都符合标准规定。因此有必要提醒消费者,在一些小维修店、小店铺购买还是有一定的风险的。