为了账号安全,请及时绑定邮箱和手机立即绑定

一段js感觉完全看不懂.求大神解释

一段js感觉完全看不懂.求大神解释

熠熠生阳 2016-02-15 15:25:34
for (var i = 0; i < attr.length; i++) {                        if(/^data-/.test(attr[i].nodeName)){              //匹配自定义属性                var name=attr[i].nodeName.slice(5).toLowerCase().replace(/-(.)/g,function(match,p1){                    return p1.toUpperCase()});        //获取自定义属性名称,并按camel语法改写            }            dataset[name]=attr[i].nodeValue;               //获取自定义属性的值,并加入dataset对象中        }
查看完整描述

5 回答

已采纳
?
_da

TA贡献22条经验 获得超29个赞

1,for (var i = 0; i < attr.length; i++) {   ,,,,,attr.length 这个是属性的长度,  这个for循环是为了遍历获取的元素所有属性。

2,然后写了个正则,if(/^data-/.test(attr[i].nodeName)){以data开头的属性如果存在。用nodeName获取其属性名。如果成功执行,那么

3,attr[i].nodeName.slice(5)截取掉5个字符也就是data-。然后toLowerCase()都转成小写。

4,replace(/-(.)/g,function(match,p1){

                    return p1.toUpperCase()});        //获取自定义属性名称,并按camel语法改写

            }

match  所匹配成功的字符串。

p1 通过(.)获取的第一个字符。并return成大写

5,dataset[name]=attr[i].nodeValue; 把匹配到的属性的值放到dataset对象中



查看完整回答
6 反对 回复 2016-02-15
?
_da

TA贡献22条经验 获得超29个赞

(.)代表任意字符

查看完整回答
2 反对 回复 2016-02-15
?
Just90

TA贡献3条经验 获得超8个赞

朋友,这段循环不难理解,我相信分开来说你一下子就明白了,attr.length 表示数组的长度,就是 attr数组中有几个元素;attr[i].nodeName表示获取当前的这个元素的节点名,/^data-/是正则表达式,将会匹配data-,.slice(5)获取元素的第六到最后一个字母,.toLowerCase()变为小写,p1.toUpperCase()将p1变为大写,然后把/-(.)/g替换了。如果要理解清楚,还要知道变量的含义的

查看完整回答
2 反对 回复 2016-02-15
?
圆葱

TA贡献2条经验 获得超4个赞

我只是来让好友看见我

查看完整回答
1 反对 回复 2016-02-15
  • 5 回答
  • 1 关注
  • 2187 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信