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

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 创建了一个可排序的表!

    • 推荐阅读
    • 拼多多换货怎么操作(拼多多换货怎么操作视频)

      在没有和卖家协商好货到付款时,请联系物流公司取回货物,拿回货物后重新退货,运费买家自行承担。2018年7月,拼多多在美国纳斯达克证券交易所正式挂牌上市。拼多多成立于2015年9月,是一家专注于C2B拼团的第三方社交电商平台。

    • 乐视手机如何进去开发者模式(乐视手机怎么操作)

      乐视手机进开发者模式的方法是:1、首先进入“设置”,选择“关于手机”,接着找到“版本号”;2、连续快速点击“版本号”多次,就可以看见“开发者选项”了。乐视手机的上市时间表已经基本确定。从内部的时间表看去,预计将于第三季度正式发布乐视手机,手机的上市时间定在第四季度。

    • 华为Mate10的电脑模式如何使用(华为Mate10的电脑模式)

      华为Mate10的电脑模式如何使用华为Mate10电脑模式使用方法非常简单,只要使用Type-C数据线,将华为Mate10手机与显示设备连接起来,就可以直接将华为Mate10手机上的画面投射到大屏幕显示设备上面,能够以简单粗暴,非常方便的方式,小手机小屏上的同步分享到屏幕设备。在华为Mate10电脑模式下,手机运行的类似PC界面的方式出现,经过优化的办公应用、浏览器等也会提供媲美电脑程序的体验。在多窗口操作的配合下,用户可以快速上手,实现PC化办公。

    • 空姐上飞机的正确姿势(飞机上免费的3种服务)

      不过大家可能有些不太知道的是飞机所买的并不仅仅是那段旅程和速度,很多买的都是服务。这会令人感觉到身心非常的愉悦。第一个就是免费的换座位服务。第三个服务则是免费药物的服务。飞机一旦起飞,没有特殊的情况是不允许停下来的,而一些患有疾病的人在旅途当中,突然觉得不舒服的时候,一定要尽快的找空姐。并且不会多收取费用。要合理的利用我们作为乘客的权利,但是也不要过分刁难空姐。

    • 蛋黄跟蛋白哪个营养多(蛋黄比蛋白营养更高)

      蛋黄跟蛋白哪个营养多蛋黄比蛋白营养更高鸡蛋的蛋白质含量丰富,是营养较为全面的天然食品,因此鸡蛋被称为“理想的营养库”。除维生素和矿物质外,蛋黄还富含磷脂和胆碱,其脂肪组成以单不饱和脂肪酸为主。单不饱和脂肪酸对心脑血管、血脂,甚至血糖都有益处。而且,蛋黄的蛋白质含量比蛋白还要高,吃蛋黄有诸多益处。

    • 犬瘟热的症状及防治(犬瘟热的症状有哪些)

      犬瘟热一般是多发于刚买回来的抵抗力比较低的幼犬,主要病犬就是严重的鼻炎,消化道阻碍和呼吸道炎症为主要症状。

    • 员工怎么与老板谈加薪(怎么和老板谈加薪比较好)

      否则,提出加薪可能导致你离开这个公司,或是加薪了,工作内容与工作岗位可能发生变化,这都会对你的职业规划与发展造成影响。

    • 降序排序怎么设置(降序排序如何设置)

      降序排序怎么设置?以下内容大家不妨参考一二希望能帮到您!选择“扩展选定区域”,点击“排序”,即可自动按数据大小从高到低排列。

    • 在室内养殖桂花方法(在室内养殖桂花方法是什么)

      接下来我们就一起去研究一下吧!在室内养殖桂花方法配制盆土:在室内养殖桂花时盆土的配制很重,这种植物的适应力很强,但是它特别喜欢微酸性的土壤,平时可以用腐叶土和园土以及沙土一起配制盆土,它们之间的比例是五比三比二,配好以后PH值应该在五到六之间,它们在装盘以后还在用高锰酸钾进行消毒。