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

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对象中

        }


熠熠生阳
浏览 2199回答 5
5回答

_da

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对象中

_da

(.)代表任意字符

Just90

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

圆葱

我只是来让好友看见我
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript