2012-01-04 9 views
6

Belli bir sayfadaki bir div'i devre dışı bırakmak için bir greasemonkey komut dosyası yazmak istiyorum. Sayfanın herhangi bir yüklemesinde DOM'ta divun nerede olacağını bilmiyorum ama her zaman bildiğimi biliyorum, bu her zaman <div id = "alertPanel"> ....</div>Belirli bir kimlik desenine sahip div blokları nasıl devre dışı bırakılır?

Bu div'u devre dışı bırakmak için nasıl giderim?

Benim intial düşünce çizgisinde bir şey vardı:

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'; 
} 

ancak söyleyebilirim ben bir eşitlik kontrolü için id özelliğine erişerek de sıkıştım.

Tesadüfen, ben bir metin düzenleyicisi kullanıyorum bu yazma - Ben geçerli HTML'de myDivs[i].

cevap

12

bir id varsa, document.getElementById kullanabilirsiniz:

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

Eğer varsa, onu kaldırabilirsiniz (muhtemelen kötü bir fikir) veya gizleyebilirsiniz:

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

Güncelleme: Başka bir yanıta Yorumunuz Re: Cevabınız için

teşekkürler. Statünüz, iframe'leri olan bir sayfaya da uygulanır. Söz konusu div bir iframe içinde. Ben ypur çözüm denedim ve maalesef işe yaramadı. belki sayfasına bir bağlantı yardımcı olacaktır: tennis.betfair.com i devre dışı bırakmak istediğiniz div id ile birisidir: minigamesContainer

eleman bir iframe ise, o zaman belge üzerinde getElementById aramak zorunda iframe, iframe s ayrı pencereleri olduğundan ve ayrı belgeleri var. Eğer iframe ait id biliyorsanız, iframe örneğini almak için document.getElementById kullanın ve sonra contentDocument kullanmak onun dokümana erişmek için, ve sonra "minigamesContainer" elemanını almak için o üzerinde getElementById kullanabilirsiniz:

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) { 
    } 
} 

(try/catch, iframe'in içeriğine erişme ihtimali olan bir güvenlik hatası nedeniyle oradadır; Greasemonkey'i, SOP'un geçerli olup olmadığını bilecek kadar iyi bilmiyorum. .)

Eğer iframe ait id bilmiyoruz Eğer biri yoksa, sen döngü sonra document.getElementsByTagName ile alma ve tarafından hepsi aracılığıyla sadece döngü yapabilir:

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) { 
    } 
} 

Referanslar :

+0

Bu harika çalışıyor - teşekkürler - ama ne, sadece 'alertPanel' aramak yerine, ben ** bir 'alertPanel2' veya' alertPanel3'ünü gizlemek istedim? (Javascript'in temellerini öğrenmeye çalışıyorum - deneme konusunda biraz gerginim.) –

1

yazdıktan sonra bir otomatik tamamlama liste verecek javascript editörü standart belirli kimliğine sahip tek eleman sahip olabileceğini tahmin. Yani: Eğer hala tüm div 's yineleme ve kendi kimliklerini kontrol etmek gerekirse

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

Ama, o zaman bu çalışması gerekir:

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

Not 'görüş ile bir eleman olduğu: none' değildir: hidden' 'ekran ile bir eleman ise gösterilmemiştir bile ekranda yer alır. – kba

İlgili konular