如何移除class为'other class'的div下<a>标签的rel属性并保留指定类属性
解决移除指定div内a标签rel属性的问题
我来帮你搞定这个需求!首先咱们先拆解下你之前代码里的问题,再一步步给出正确的实现方式。
你之前代码的问题分析
- 第一段代码:
document.getElementsByClassName('other class')返回的是一个HTMLCollection(类数组的DOM元素集合),不是单个元素,所以你直接链式调用.document.getElementsByTagName("a")是完全错误的——DOM元素上并没有document这个属性,而且也不能直接跳过遍历集合的步骤。 - 第二段代码:
activeLis变量根本没定义,而且两个for循环重复使用了i作为计数器,会导致循环逻辑混乱;最重要的是,你直接选中了页面上所有的a标签,会把.myclass下的a标签rel也移除,完全不符合你的需求。
正确的实现方式
最简洁且易维护的方式是使用querySelectorAll,它支持直接用CSS选择器精准定位目标元素:
// 精准选中class同时包含other和class的div下的所有a标签 const targetLinks = document.querySelectorAll('.other.class a'); // 遍历每个目标a标签,移除rel属性 targetLinks.forEach(link => { link.removeAttribute('rel'); });
如果需要兼容不支持forEach的旧浏览器,可以改用普通for循环:
const targetLinks = document.querySelectorAll('.other.class a'); for (let i = 0; i < targetLinks.length; i++) { targetLinks[i].removeAttribute('rel'); }
如果你更倾向于用getElementsByClassName来实现,也可以这样写(需要注意遍历集合的步骤):
// 获取所有class为other和class的div元素集合 const otherDivs = document.getElementsByClassName('other class'); // 遍历每个div for (let i = 0; i < otherDivs.length; i++) { // 获取当前div下的所有a标签 const linksInDiv = otherDivs[i].getElementsByTagName('a'); // 遍历移除每个a标签的rel属性 for (let j = 0; j < linksInDiv.length; j++) { linksInDiv[j].removeAttribute('rel'); } }
以上几种方式都能精准只移除.other.class下a标签的rel属性,同时保留.myclass下a标签的rel属性,完全符合你的需求。
内容的提问来源于stack exchange,提问作者Krolface
相关产品推荐
相关产品推荐

