Come ottenere i contenuti href “grezzi” in JavaScript
-
20-09-2019 - |
Domanda
Sto cercando di scrivere uno script GreaseMonkey in cui voglio trovare tutti i link che sono collegamenti relativi. Mi sembrava che il modo per farlo sarebbe quello di abbinare il contenuto del href contro /^https?:///
.
Ma trovo che quando accedo attributo href dell'ancora, è sempre normalizzata o cotte in una forma che contiene "http". Cioè, se il codice HTML contiene:
<a id="rel" href="/relative/link">inner</a>
Accesso
document.getElementById("rel").href
ritorna
http://example.com/relative/link
Come posso accedere ai dati grezzi in href?
In alternativa, c'è un modo migliore per trovare i link relativi?
Soluzione
Prova il metodo di href="https://developer.mozilla.org/en/DOM/element.getAttribute" rel="noreferrer"> getAttribute
.
Altri suggerimenti
tipica. Ho capito io quasi subito dopo la pubblicazione della questione.
invece che:
anchor.href
utilizzo:
anchor.getAttribute("href")
Naturalmente, mi c'è voluto più tempo per inserire questa risposta quello che ha preso tutti gli altri a rispondere. (Accidenti, voi persone sono veloci.)
Ecco un frammento di codice si potrebbe correre per provare.
const anchors = document.getElementsByTagName('a');
for (let anchor of anchors) {
let hrefFullPath = anchor.href;
let hrefRelativePath = anchor.attributes.href.value;
console.log('hrefFullPath', hrefFullPath);
console.log('hrefRelativePath', hrefRelativePath);
}
Diciamo, siete a http://localhost:4200
, e questo è il documento come avete dimostrato per la questione.
<a id="rel" href="/relative/link">inner</a>
valore di attributo di questo ancora di href
è:
document.getElementById('rel').attributes.href.value => /relative/link
E valore href
di ancoraggio è:
document.getElementById('rel').href => http://localhost:4200/relative/link
Spero che aiuta.