I've got the script below
var els = document.getElementsByTagName("a"); for(var i = 0, l = els.length; i < l; i++) { var el = els[i]; el.innerHTML = el.innerHTML.replace(/link1/gi, 'dead link'); } However this searches through the page and takes about 20 seconds to do it as there are LOTS of links.
However I only need to target the a's that have a specific href, for eg. "http://domain.com/"
So ideally I'd like to be able to do this in a similar fashion to jQuery, but without using a framework. So something like
var els = document.getElementsByTagName("a[href='http://domain.com']"); How would I go about doing this so it only searches the objects with that matching href?
Use the querySelector() method to get an element by an href attribute, e.g. document. querySelector('a[href="https://example.com"]') . The method returns the first element that matches the selector or null if no element with the provided selector exists in the DOM.
getElementById('someDiv'); // create <a> tag var tag = document. createElement(a); // set the href attribute tag. setAttribute('href', exampleHref); // append the node to the parent div. appendChild(tag);
It's been over 4 years since this question was posted and things progressed quite a bit.
You can't use:
var els = document.getElementsByTagName("a[href='http://domain.com']"); but what you can use is:
var els = document.querySelectorAll("a[href='http://domain.com']"); (Note: see below for browser support)
which would make the code from your question work exactly as you expect:
for (var i = 0, l = els.length; i < l; i++) { var el = els[i]; el.innerHTML = el.innerHTML.replace(/link1/gi, 'dead link'); } You can even use selectors like a[href^='http://domain.com'] if you want all links that start with 'http://domain.com':
var els = document.querySelectorAll("a[href^='http://domain.com']"); for (var i = 0, l = els.length; i < l; i++) { var el = els[i]; el.innerHTML = el.innerHTML.replace(/link/gi, 'dead link'); } See: DEMO
The browser support according to Can I use as of June 2016 looks pretty good:
(See: http://caniuse.com/queryselector for up to date info)
There is no support in IE6 and IE7 but IE6 is already dead and IE7 soon will be with its 0.68% market share.
IE8 is over 7 years old and it partially supports querySelectorAll - by "partially" I mean that you can use CSS 2.1 selectors like [attr], [attr="val"], [attr~="val"], [attr|="bar"] and a small subset of CSS 3 selectors which luckily include: [attr^=val], [attr$=val], and [attr*=val] so it seems that IE8 is fine with my examples above.
IE9, IE10 and IE11 all support querySelectorAll with no problems, as do Chrome, Firefox, Safari, Opera and all other major browser - both desktop and mobile.
In other words, it seems that we can safely start to use querySelectorAll in production.
For more info, see:
See also this answer for the difference between querySelectorAll, querySelector, queryAll and query and when they were removed from the DOM specification.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With