我们通常使用 index of 的方法进行 for循环的排重,或者获取索引。
通过判断是否位-1的情况,来进行排重。
比如:indexOf(“?”) != -1;
在最近开发的时候,我需要获取a标签的href属性,然后给href属性 给a标签上增加自定义属性,使用index的方法,发现报错了。
报错代码:
<script>
var aTargent = document.getElementsByTagName('a');
var aTargentUrl;
for (var i = 0; i < aTargent.length; i++) {
let aHrefOld = aTargent[i].getAttribute("href");
if (aHrefOld.indexOf("?") != -1) {
let aHrefNew = aHrefOld.split("?")[0];
aTargent[i].setAttribute("track-href", aHrefOld);
aTargent[i].setAttribute("href", aHrefNew);
}
}
</script>
运行代码,会发现控制台报这个错误:
track-href.html:54 Uncaught TypeError: Cannot read property 'indexOf' of null
at track-href.html:54
找了很久也没找到是什么原因,后来发现是因为有的标签缺少 href属性导致index of 的时候 是null ,产生报错。
因为开发的页面里有很多的a标签,但是有的a标签是做按钮使用的,所以会造成a标签没有href属性: 比如
<a role="button" class="submit-btn">确认</a>
解决错误 在进行index of 的时候,先把null的情况排除,即无href的标签。添加 != null
<script>
var aTargent = document.getElementsByTagName('a');
var aTargentUrl;
for (var i = 0; i < aTargent.length; i++) {
let aHrefOld = aTargent[i].getAttribute("href");
if (aHrefOld != null && aHrefOld.indexOf("?") != -1) {
let aHrefNew = aHrefOld.split("?")[0];
aTargent[i].setAttribute("track-href", aHrefOld);
aTargent[i].setAttribute("href", aHrefNew);
}
}
</script>
最后很完美的解决了问题,而且没有报错。