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

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

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

数据排序是指将数据按照指定的值,按升序或降序排列。在本教程中,我们将使用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 创建了一个可排序的表!

    • 推荐阅读
    • 十款最好用的面霜是哪款(女人买面霜别总选大牌)

      毕生之研复合维生素面霜注重抗初老需求,特别关注皮肤光老化问题的女生,可以试试这款面霜。配方中加入ABC复合维生素成分,另外复配0.2%的A醇及A醇衍生物,全面抵御皮肤光老化问题,提升皮肤紧致度。维生素成分间加乘作用,做到抗氧化同时皮肤保湿感。整体配方中未加入六大刺激成分,相对皮肤过敏问题有所减少。利用多种植物精粹和多肽成分作用,滋润同时有效减淡皮肤表层纹路。

    • 民间歇后语45句(民间歇后语20句看了就懂)

      一下子就清除干净。现指压力得以缓解,心情轻松愉快。指有值得赞扬的地方。讽刺人想美事,不符合实际。

    • 角磨机电锯加什么油(角磨机怎么加润滑油)

      角磨机电锯加什么油这个里面加的是机油。角磨机加润滑油需要先拆盖,取出转子。出现转速慢或按触不良把紧碳刷盖帽拧紧或是碳刷磨损完更换同型号规格碳刷即可。磨机适合用来切割、研磨及刷磨金属与石材,作业时不可使用水。切割石材时必须使用引导板。针对配备了电子控制装置的机型,如果在此类机器上安装合适的附件,也可以进行研磨及抛光作业。

    • 微波炉加热的馒头变硬了如何变软(微波炉加热包子馒头总是发硬)

      除了这个方法之外,小编还给大家分享一招,那就是利用保鲜袋加热,这个保鲜袋一定是可以微波加热的,不然温度过高就会导致融化,先把保鲜袋里面加入少许的清水,再把包子放到里面去,要是冷藏过的包子就只要打湿包子表皮即可,随后放到微波炉里面加热即可,这个时候要注意,别把保鲜袋密封了,不然可能会发生爆炸。

    • 牛奶根和五指毛桃的区别(牛奶根和五指毛桃介绍)

      牛奶根和五指毛桃的区别品种不同牛奶根:学名树地瓜根,别名牛奶根。属荨麻目、桑科、榕属、粗叶榕种植物。瘦果卵球形,光滑,花柱侧生,长,弯曲。榕果成对腋生或生于已落叶枝上,球形或椭圆球形,无梗或近无梗。分布于陕西南部、四川、贵州、云南。分布于云南、贵州、广西、广东、海南、湖南、福建、江西。

    • 三清山景区穿衣指南(最适合避暑的三清山)

      ,现在小编就来说说关于三清山景区穿衣指南?下面内容希望能帮助到你,我们来一起看看吧!

    • 玉米窝窝头怎么做松软(玉米窝窝头的做法怎么做才能松软)

      现在生活中,很多人为了健康都会选择食用粗粮,而玉米就是人们吃粗粮的首选,人们都喜欢把玉米磨面以后制成窝窝头。怎样才能做出松软可口的玉米窝窝头呢?想具体了解可以看看我对玉米窝窝头做法的具体介绍。玉米窝窝头的做法步骤教程1、玉米窝窝头在制作时可以使用单独的玉米面,也可以加入适当的黄豆面或者小米面,在制作时具体配料是,玉米面150克,黄豆面50克,酵母二克,奶粉15克,鸡蛋一个,温水适量。

    • 汽车玻璃水有区别吗(汽车玻璃水你真的了解它的作用吗)

      一般低端车型喷射玻璃水像水柱,喷的很猛。高端车型,喷射玻璃水更加雾化,更加均匀。

    • 参杞木耳烧肚片(怎么做参杞木耳烧肚片)

      参杞木耳烧肚片材料:熟猪白肚子250克,党参10克,枸杞子10克,木耳30克,笋片、荸荠、鸡蛋、湿淀粉、大葱、生姜、酱油、精盐、味精、黄酒、菜油各适量。枸杞子洗净,放小碗内,上笼蒸30分钟。炒锅放在旺火上,加菜油烧至六成热时,将酱好的肚片放锅内,炸成黄色,烹入黄酒,加葱、姜、精盐、味精,下蒸熟的枸杞子、党参煎液、荸荠片,用湿淀粉勾芡。佐餐食用,吃枸杞子、木耳及猪肚。

    • win7电脑锁机怎么解决(win7电脑锁机怎么办)

      以下内容大家不妨参考一二希望能帮到您!win7电脑锁机怎么解决首先打开“控制面板”,点击“外观和个性化”→“更改屏幕保护程序”。经过这样的设置后,当在1分钟之内无法触及电脑时,屏幕保护程序就会自动启动。在打开的窗口中点击唤醒时需要密码选项。在出现的界面中给当前或指定用户设置屏保密码即可。