2012-01-04 15 views
6

Vorrei scrivere uno script greasemonkey per disabilitare un div su una determinata pagina. Su un determinato carico della pagina non so dove si trova il DOM, ma so che è sempre chiamato <div id = "alertPanel"> ....</div>Come disabilitare i blocchi div con un determinato pattern ID?

Come dovrei fare per disabilitare questo div?

I miei pensieri intial erano qualcosa sulla falsariga di:

var myDivs= document.getElementsByTagName('div'); 

for (i=0; i<myDivs.length; i++) 
{ 

    if (myDivs[i].<get id property somehow> = "alertPanel") 
    myDivs[i].style.visibility = 'hidden'; 
} 

ma come si può dire io sono bloccato durante l'accesso alla proprietà ID per un controllo di uguaglianza.

Per inciso, sto usando un editor di testo per scrivere questo - ho indovinare che una norma JavaScript Editor darebbe un elenco di completamento automatico dopo aver digitato myDivs[i].

risposta

12

se ha un id, è possibile utilizzare document.getElementById:

var div = document.getElementById("alertPanel"); 

Quindi, se esiste, è possibile rimuoverlo (probabilmente una cattiva idea) o nasconderlo:

if (div) { 
    div.style.display = "none"; // Hides it 
    // Or 
    // div.parentNode.removeChild(div); // Removes it entirely 
} 

Aggiornamento: Re tuo commento su un'altra risposta:

grazie per la risposta. Il tuo statemt si applica anche a una pagina con iframe. Il div in questione è in un iframe. Ho provato la soluzione ypur e purtroppo non ha funzionato. forse un link alla pagina aiuterà: tennis.betfair.com il div voglio disattivare è quello con ID: minigamesContainer

Se l'elemento è in una iframe, allora dovete chiamare getElementById sul documento questo è nel iframe, dal momento che iframe s sono finestre separate e hanno documenti separati. Se si conosce il id del iframe, è possibile utilizzare document.getElementById per ottenere l'istanza iframe, e quindi utilizzare contentDocument per accedere suo documento, e quindi utilizzare getElementById su che per ottenere l'elemento "minigamesContainer":

var iframe, div; 
iframe = document.getElementById("the_iframe_id"); 
if (iframe) { 
    try { 
     div = iframe.contentDocument.getElementById("minigamesContainer"); 
     if (div) { 
      div.style.display = "none"; 
     } 
    } 
    catch (e) { 
    } 
} 

(Il try/catch esiste a causa di un potenziale errore di sicurezza durante l'accesso al contenuto dell'iframe, non conosco abbastanza bene Greasemonkey per sapere se si applica allo SOP. Tendo ad ammettere che non lo sia, ma che sia più sicuro .. .)

Se non si conosce il id del iframe o se non ne ha uno, si può semplicemente scorrere tutti loro inducendole con document.getElementsByTagName e poi loop:

var iframes, index, iframe, div; 
iframes = document.getElementsByTagName("iframe"); 
for (index = 0; index < iframes.length; ++index) { 
    iframe = iframes[index]; 
    try { 
     div = iframe.contentDocument.getElementById("minigamesContainer"); 
     if (div) { 
      div.style.display = "none"; 
      break; 
     } 
    } 
    catch (e) { 
    } 
} 

Riferimenti :

+0

Funziona alla grande - grazie - ma cosa succede se, invece di cercare solo 'alertPanel', anch'io ** volevo nascondere un' alertPanel2' o 'alertPanel3'? (Sto cercando di imparare le basi di javascript - Sono un po 'nervoso per lo sperimentare.) –

1

In HTML valido si può avere solo elemento con ID certo. Quindi:

document.getElementById('alertPanel').style.visiblity = 'hidden'; 

Ma se hai ancora bisogno di iterare tutti i div e di controllare i loro ID, allora questo dovrebbe funzionare:

if (myDivs[i].id == "alertPanel") myDivs[i].style.visibility = 'hidden'; 
+1

noti che un elemento con 'visibilità: hidden' occupa spazio sullo schermo anche quando non mostrato mentre un elemento con' visualizzazione: none' no. – kba

Problemi correlati