| 12769 | |
| 12770 | //获取开始标签的名称,收集属性集合,开始位置和结束位置,并且返回该对象 |
| 12771 | function parseStartTag() { |
| 12772 | var start = html.match(startTagOpen); //匹配开始标签 匹配开头必需是< 后面可以忽略是任何字符串 ^<((?:[a-zA-Z_][\\w\\-\\.]*\\:)?[a-zA-Z_][\\w\\-\\.]*) |
| 12773 | console.log(start) |
| 12774 | console.log(start[0].length) |
| 12775 | |
| 12776 | if (start) { |
| 12777 | var match = { |
| 12778 | tagName: start[1], //标签名称 |
| 12779 | attrs: [], //标签属性集合 |
| 12780 | start: index //标签的开始索引 |
| 12781 | }; |
| 12782 | //标记开始标签的位置,截取了开始标签 |
| 12783 | advance(start[0].length); |
| 12784 | var end, attr; |
| 12785 | |
| 12786 | while ( |
| 12787 | !(end = html.match(startTagClose)) //没有到 关闭标签 > 标签 |
| 12788 | && (attr = html.match(attribute)) //收集属性 |
| 12789 | ) { |
| 12790 | console.log(html) |
| 12791 | //截取属性标签 |
| 12792 | advance(attr[0].length); |
| 12793 | match.attrs.push(attr); //把属性收集到一个集合 |
| 12794 | } |
| 12795 | if (end) { |
| 12796 | match.unarySlash = end[1]; //如果是/>标签 则unarySlash 是/。 如果是>标签 则unarySlash 是空 |
| 12797 | console.log(end) |
| 12798 | |
| 12799 | //截取掉开始标签,并且更新索引 |
| 12800 | advance(end[0].length); |
| 12801 | match.end = index; //开始标签的结束位置 |
| 12802 | return match |
| 12803 | } |
| 12804 | } |
| 12805 | } |
| 12806 | |
| 12807 | //把数组对象属性值循环变成对象,这样可以过滤相同的属性 |
| 12808 | //为parseHTML 节点标签堆栈 插入一个桟数据 |