常用的JS方法

    这周写了很多项目,也遇到了很多看似很简单的问题,但是实际操作起来发现其实还是有点复杂的,当然也是一些常用的方法,掌握的话,以后也是会经常遇到。当然在此之前,自己也是去网上搜索过,不过网上的东西都是比较杂乱,可能有的满足不了项目的需求,我们可以在一个基础的方法上进行扩展,去达到自己的需求。

    近期遇到的第一个常用的方法就是关于table表格固定表头的问题,网上的方法非常多,有的也是非常的复杂,有的简单但是却满足不了自己的项目,自己遇到的这个项目中,table里面的thead和tbody,都是动态生成的,在加载以后,会出现一个表头,但是没有身体部分,所以表头都是缩小的表头,从服务器取到数据以后,身体部分出现,表头也随着展开。因为字段比较多,所以还出现了横向的滚动条,因此使用fixed的定位,会导致只有表头前几个字段可以看见,后面拉动横向滚动条的时候,表头依然是固定不变的,这样显然达不到自己预想的效果。然后在网上搜到了一个利用滚动事件进行固定的例子,一下子让自己茅塞顿开,对上面的方法也是进行了自己的扩展,下面是代码:

$(window).scroll(function(){
    let scroll = $(window).scrollTop();
    //获取滚动条距离顶部的距离
    $(selector)[0].style.transform = 'translateY("+scrollTop+"px)';
});

    这个主要就是利用了css3的平移变换的transform方法,让表头始终固定在顶部的位置,代码也是非常的简单,当然这个是基于window的滚动事件,如果是某个元素滚动,则在某个元素身上绑定滚动事件即可。另外一个则是如何将json转换成树形结构,这个网上的代码非常多,自己也是看了很多,一直没有能明白其中的意思,后来也是将代码写一遍,并且log了很多次,才明白了原理,这里也是详细解释一下这个代码的意思。

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
</head>
<body>
	<script>
		/*
		*@param {json} 		需要转换的json数据
		*@param {string}	数组的id属性字符串
		*@param {string}	数组元素父级元素的id属性,也就是pid的意思
		*@param {string}	数组元素子元素的属性名
		*@return {array}	返回数组
		*/
		function transJson(jsonData,id,pid,children){
			let arr = [],hash = [],len = jsonData.length;
			for(let i = 0;i < len;i++){
				hash[jsonData[i][id]] = jsonData[i];	
				//将数组转换成对象的形式,即a[i][id]是数组中的id属性作为hash数组的属性名
			}
			for(let j = 0;j < len;j++){
				//aVal实际就是jsonDate数组,hashVP则代表hash数组的父元素的id,即pid
				let aVal = jsonData[j],hashVP = hash[aVal[pid]];
				if(hashVP){
					!hashVP[children] && (hashVP[chilren] = [])	
					//判断父对象是否存在,即pid是否存在,不存在,则将对象放到第一层
					hashVP[children].push(aVal);	//存在的话就将本对象放入chilren属性
				}else{
					r.push(aVal);
				}
			}
		}
	</script>
</body>
</html>

    自己看这段代码的时候,开始始终无法理解pid的意思,尝试了很多次,最后再知道pid就是指向父元素的id的意思,如果pid不存在的话,那就将这个对象放在最外层。当然转换json的结构,也只是第一步,如何将json属性结构去体现在dom上,自己也是尝试写过,但是抽象不出来方法,面对那些无限嵌套的情况,也是束手无策,网上看到的方法也是比较复杂,难以理解,如果有小伙伴知道,也可以和我分享大笑


    最后最近写表格数据比较多,也是用到了很多增删改查的方法,筛选的条件少的话,还好说,但是条件一旦多了,要判断很多次,容易漏掉很多种情况,看到网上有说用面向对象的方法来解决,但是奈何自己能力有限,也是没有能完全理解,近期也是会对增删改查的问题继续研究,明白的话,也是会放在博客上和大家继续分享。    

猜你喜欢

转载自blog.csdn.net/ningqiugu/article/details/80571147