2016年更新
自从这个问题发布以来已经过去了4年多,事情有了很大的进展。
您不能使用:
var els = document.getElementsByTagName("a[href='http://domain.example']")
但你可以使用的是:
var els = document.querySelectorAll("a[href='http://domain.example']")
(注意:请查看下面的浏览器支持情况)
这将使您问题中的代码完全按照您的期望工作:
for (var i = 0, l = els.length; i < l; i++) {
var el = els[i];
el.innerHTML = el.innerHTML.replace(/link1/gi, 'dead link');
}
如果你想要获取所有以'http://domain.example'
开头的链接,甚至可以使用像a[href^='http://domain.example']
这样的选择器:
var els = document.querySelectorAll("a[href^='http://domain.example']");
for (var i = 0, l = els.length; i < l; i++) {
var el = els[i];
el.innerHTML = el.innerHTML.replace(/link/gi, 'dead link');
}
请参见:演示
浏览器支持
根据Can I use截至2016年6月的数据,浏览器支持情况相当不错:
(有关最新信息,请参见http://caniuse.com/queryselector)
IE6和IE7不支持,但IE6已经过时了
而IE7很快也会随着其0.68%的市场份额而过时。
IE8已经超过7年的历史,它部分地支持querySelectorAll - 我所指的“部分地”是指您可以使用CSS 2.1选择器,如[attr]
,[attr="val"]
,[attr~="val"]
,[attr|="bar"]
和一小部分CSS 3选择器,幸运的是,它们包括:
[attr^=val]
,[attr$=val]
和[attr*=val]
,因此看起来IE8对我上面的示例没有问题。
IE9、IE10 和 IE11 都可以毫无问题地支持 querySelectorAll,同样的,Chrome、Firefox、Safari、Opera 和所有主要的桌面和移动浏览器也是如此。
换句话说,我们可以放心地在生产中开始使用 querySelectorAll
。
更多信息
欲了解更多信息,请参见:
请参考
此答案,了解
querySelectorAll
、
querySelector
、
queryAll
和
query
之间的区别,以及它们何时从DOM规范中删除。
document.querySelectorAll
来查看是否有所不同,但是这种方法在 IE7 及更早版本中不可用。另一个可能的选择是使用 CSS3 来改变外观和/或添加一些额外的文本。 - Felix KlingquerySelectorAll
的内部工作原理。但这就是为什么OP应该尝试和测试它的原因。 - Felix Kling