标签自定义顺序

公司产品提的需求,要让用户可以自定义标签的顺序,还不用后端的配合,那我就只能自己来了;

页面效果大致如下:

这里写图片描述

一开始以为应该不是很难,但是越做,就会发现越多的问题;

1、我们如何把自己定义的顺序挂载到上边的标签上呢?

思路是: for循环里获取自己定义的顺序值,赋值给一个json值;然后再来一个for循环,将json里的值赋值给上面的标签, 给每天标签添加一个 data-id 的自定义属性,然后可以作为后面判断显示顺序的依据;

2、我们怎么使标签按顺序显示?

获取到所有的标签,然后应用for循环,将标签添加到一个空数组arr,然后arr.sort;
代码如下:

arr.sort(function(a,b){
   return a.getAttribute('data-index') - b.getAttribute('data-index');
});

然后我们就可以实现标签的顺序显示;

3、问题来了,我们现在还没有存储,所以下次更改顺序的时候,取出来的标签顺序本来就是上一次设置好的,和初始的不一致,而下面的设置顺序确实按照初始值来的。所以就会出现bug;

所以我给每个标签添加一个 data-index的自定义属性;然后每次设置完顺序,要取标签的时候,先把他们按data-index的设置顺序排列,这样就恢复到了初始值,不会发生混乱;

4、用户如果所有顺序都选 1,那我怎么处理?

考虑到这个问题,因为我不能一个标签选择了1,然后其他标签的1都置灰,变不可选;因为这么做,标签顺序就不能换了。。除非9个标签,我加10个顺序,多出来一个数字10可以用来转换;
这种做法不太友好,遂放弃;
下一周做法就是,取到设置的每个顺序的时候,我们对比一下,如果有相同的,就弹窗提示一下用户,这样比较合理;
问题来了:怎么判断数组里有重复数据?

var newArr=arr.sort(); 

for(var i=0;i<arr.length;i++){ 
   if (newArr[i] == newArr [i+1]){ 
       alert("数组重复内容:"+newArr[i]); 
   } 
} 

猜你喜欢

转载自blog.csdn.net/love_your_life/article/details/79504138