前言
在网页中,实现列表的升序和降序,是一个比较常见的操作,尤其是在做一些数据栓选表格的时候,按照索引,时间等特定的参数,提供升序和降序排列的功能的
具体示例

原生js
在原生js
中主要是操作DOM
,遍历节点,通过removeChild()
删除节点,而使用appendChild()
添加元素去实现的
代码如下所示
// 排序
function sort() {// 获取父级元素DOMvar ul = document.getElementsByTagName('ul')[0];// 判断是否包含子元素if(ul.hasChildNodes()) {var len = ul.childNodes.length; // 子元素的个数var arr = []; // 新数组变量用于存储节点for(var i = 0; i<len;i++) {arr[i] = ul.childNodes[0]; // 把节点存入数组ul.removeChild(ul.childNodes[0]); // 从第一个元素开始删除}// 倒过来遍历所有的节点,降序for(var i = len-1;i>=0;i--) {ul.appendChild(arr[i]); // 添加到ul为子元素}}
}
如下是html
结构
<ul><li>小红-1</li><li>张三-3</li><li>李四-4</li><li>王五-5</li>
</ul>
<input type="button" onclick="sort()" value="降序或升序" />
分析
上面的示例是先把容器html
内容清空,最后,把数组的数据以倒排序的方式遍历并填充到之前的ul
容器里面
使用原生js
方式就是要遍历DOM节点,然后依赖DOM对象的属性或方法操作DOM
的
Vue版本实现
在Vue
里面是操作数据,结合数组的sort
方法一个简单的方法就可以实现的,原生js
想要实现同样类似的效果,那就得不断的去查找DOM
节点,操作节点实现的
<template><div class="wrap"><div><ul><li v-for="(item,index) in lists" :key="index">{{item.name}}-{{item.lan}}-{{item.chengji}}</li></ul></div><div class="btn"><el-button type="primary" @click="handleJiangxu">降序</el-button><el-button type="primary" @click="handleShengxu">升序</el-button></div></div>
</template><script>export default {name: 'ascendDes',data() {return {lists: [{name: '小王',lan: '语文',chengji: 90},{name: '小红',lan: '语文',chengji: '79'},{name: '小李',lan: '语文',chengji: '71'},{name: '小白',lan: '语文',chengji: '85'}]}},methods: {// 降序handleJiangxu() {this.lists = this.lists.sort((a, b) => a.chengji - b.chengji).reverse() // 反转一下},// 升序handleShengxu() {this.lists = this.lists.sort((a,b)=>a.chengji-b.chengji);}}}
</script><style lang="scss" scoped>
.wrap {text-align: center;
}
.btn {margin-top: 20px;
}
</style>
使用vue
实现,发现就很简单,使用sort(a,b)
方法,其中a
代表前一个数,b
代表后一个数,做一个差值,就可以判断哪个大,哪个小的
总结
升序和降序在Js
中是一个比较常见的操作,做一些简单的排序操作可以基于sort
方法实现
JS如何为表单聚焦控件设置醒目的样式
2023-01-31

Js如何实现当网页超过一屏时导航菜单始终置顶-吸顶盒效果
2023-01-30

VueJs中如何使用Teleport组件
2023-01-22

VueJs中如何使用provide与inject
2023-01-21

点击左下角查看更多