多标签点击排序问题(获取点击标签的顺序等)
2017-09-27 16:43
211 查看
1.问题描述:
有n个同样的标签,随便点击一个如何确定点击的是哪个标签?
进一步问题:
![](https://img-blog.csdn.net/20170927162711222?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvTWFjaV95ZXJh/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
来自百度笔试
2.解决多标签点击获取顺序问题,
以上代码可以实现点击一个li标签就会返回其在父元素下的顺序,分析如下:
获取的li集合不是Array类型,但具有length属性,可以用li[x]访问子元素也就是一个节点。定义一个监听事件,通过e.target判断是哪个li被点击。
网上看到一些解决这个问题的方法,主流是一个通过for循环给给每个li添加监听事件的,当li标签很多,性能就会变差,我的代码比较简洁。需要注意的是,返回的li是页面所有的li标签,所以页面有多个ul,ol时,需要区分出你想判断的li块,建议给每个li加一个class.
2.多标签点击排序问题–百度笔试题目的解决:
(只实现了点击降序,升序思路一样的)
效果展示(点击敏捷那一栏之前和之后)
![](https://img-blog.csdn.net/20170927164243439?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvTWFjaV95ZXJh/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
![](https://img-blog.csdn.net/20170927164301833?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvTWFjaV95ZXJh/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
关键点分析:获取顺序就是之前那个思路,这里主要是解决排序的思路。
核心是用tr下cells属性包含其下的td集合,
反思:cells这个属性可能不常见,可能只对table有效,如果遇到ul li呢?
发现children属性很好用,会返回子元素的集合而不会像childNodes一样需要筛选。
有n个同样的标签,随便点击一个如何确定点击的是哪个标签?
进一步问题:
来自百度笔试
2.解决多标签点击获取顺序问题,
<ul> <li>5</li> <li>2</li> <li>3</li> <li>88</li> <li>00</li> </ul>
var li = document.getElementsByTagName('li'); //ByTagName或者ClassName都获取页面所有的标签和class,返回一个集合(不是数组)。 document.onclick = function(e){ for(var i=0;i<li.length;i++){ if(li[i]==e.target){ alert(i); break; } } }
以上代码可以实现点击一个li标签就会返回其在父元素下的顺序,分析如下:
获取的li集合不是Array类型,但具有length属性,可以用li[x]访问子元素也就是一个节点。定义一个监听事件,通过e.target判断是哪个li被点击。
网上看到一些解决这个问题的方法,主流是一个通过for循环给给每个li添加监听事件的,当li标签很多,性能就会变差,我的代码比较简洁。需要注意的是,返回的li是页面所有的li标签,所以页面有多个ul,ol时,需要区分出你想判断的li块,建议给每个li加一个class.
2.多标签点击排序问题–百度笔试题目的解决:
(只实现了点击降序,升序思路一样的)
var th = document.getElementsByTagName('th'); var td = document.getElementsByTagName('td'); var tr = document.getElementsByTagName('tr'); var table = document.getElementsByTagName('table'); //th,td都是返回的节点集合,不是数组类型不可以用forEach,find这些方法,只可以用for 然后th[i]选择元素 //console.log(td); var table = document.getElementsByTagName('table'); document.onclick = function(e){ for(var i=0;i<th.length;i++){ if(th[i]==e.target){ console.log(i); sortBy(i); break; } } } function sortBy(i){ var array=[]; for(var j=1;j<tr.length;j++){ array.push(tr[j]); } array.sort(function(a,b){return a.cells[i].innerText-b.cells[i].innerText;}); var iHTML = ""; array.forEach(function(elem){ iHTML+='<tr>'+elem.innerHTML+'</tr>'; }); table[0].innerHTML = '<table>'+'<tr>'+tr[0].innerHTML+'</tr>'+iHTML+'</table>'; }
效果展示(点击敏捷那一栏之前和之后)
关键点分析:获取顺序就是之前那个思路,这里主要是解决排序的思路。
核心是用tr下cells属性包含其下的td集合,
return a.cells[i].innerText-b.cells[i].innerText;就可以达到排序的目的,要活用sort函数。把集合内容提取出来放在数组然后排序,之后在把其innerHTML进行拼接,付给table,就可以实现点击排序要求了。
反思:cells这个属性可能不常见,可能只对table有效,如果遇到ul li呢?
发现children属性很好用,会返回子元素的集合而不会像childNodes一样需要筛选。
<ul id="myul"> <li>5</li> <li>2</li> <li>3</li> <li>88</li> <li>00</li> </ul> var myul = document.getElementById("myul"); console.log(myul.children);
相关文章推荐
- 获取DataGridView绑定BindingSource的数据表,并根据树控件点击进行筛选数据表,下拉控件自定义排序问题初步解决方法,解决了该行属于另一个表的错误提示.
- IE6下通过a标签点击切换图片的问题
- html a标签 图片边框和点击后虚线框的问题
- IBOutletCollection 索引获取顺序问题
- 获取ul下li标签里点击的是哪一个li并获取li里a标签的值
- 问题描述大概如下:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。 请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
- js点击获取标签里面的id
- a标签点击跳转之后返回url多了#以及相关问题
- IE下 checkbox、radio等标签的label中的img点击无效(点击不能选中)问题解决
- bootstrap popover与a标签点击事件冲突,需要点击两下才能显示问题
- 用指针变量作函数形参接收数组地址,解决10个整数按由小到大顺序排序问题
- 从零开始学_JavaScript_系列(十一)——dojo(4)(GRID表格进阶:格式化、style、数据获取、多重排序、点击事件)
- Struts2 标签和标签顺序的问题
- a标签点击后的虚线框问题
- MFC Cdockablepane AttachToTabWnd 选项卡 拖拽 点击 双击 标签栏 子停靠面板消失问题解决方案
- jsp的C标签获取后台值报错问题
- 点击按钮触发js获取标签里的内容并修改
- a标签点击后的虚线框问题
- UITableView获取cell的row值(解决自定义cell里的button通过点击无法获得cell的indexpath的问题
- 如何使用正确的顺序获取托管元数据中的标签