problema getElementsByTagName
-
28-10-2019 - |
Domanda
- Ho una pagina con molti script a doppio clic
-
Ho un codice js inserito nella parte superiore del corpo (tramite s.src= ('parts_async_dev.js')):
var innerHTML = document.getElementsByTagName('html')[0].innerHTML.toString(); var regexp = /ad.doubleclick.net/gm; var matches = innerHTML.match(regexp); alert('found ' + matches.length + ' tags by regexp ' + regexp); console.log( innerHTML);
alert
dice che la corrispondenza restituisce solo 2 dei tag ad.doubleclick.net
.
Ho pensato prima che il codice non possa accedere a tutto il corpo se non posizionato nella parte inferiore del corpo.
Ma trova 2 tag all'interno del div "interstitial_wrapper" che viene dopo il mio codice.
Quindi le mie domande sono:
- perché è così
- Come accedere a tutto il corpo del modulo di avvio del corpo (potrei non utilizzare l'evento "onload" del corpo. È necessario utilizzare lo script al più presto)
Dai un'occhiata a http://wap7.ru/folio/bannerstat/partners/doubleclick2.html e vedi la sorgente di visualizzazione, perché è troppo grande per essere inclusa qui.
Soluzione
Non è necessario eseguire il binding all'evento onload.Basta eseguire il binding all'evento DOMContentLoaded
.
Dato che hai già incluso jQuery nella tua pagina, puoi farlo facilmente utilizzando .ready
:
$(document).ready(function() {
var innerHTML = document.body.innerHTML;
/* If you want to use a RegExp, use the following:
var regexp = /ad\.doubleclick\.net/gi; // Note: escaped dot
var matches = innerHTML.match(regexp);
matches = matches ? matches.length : 0; // matches can be `null`
*/
// This is more effective:
var matches = innerHTML.split('ad.doubleclick.net').length - 1;
alert('Found ' + matches + ' tags.');
console.log( innerHTML );
});