2012-01-04 1 views
6

Я хотел бы написать сценарий greasemonkey, чтобы отключить div на определенной странице. При любой заданной нагрузке страницы я не знаю, где в DOM будет div, но я знаю, что это всегда называется <div id = "alertPanel"> ....</div>Как отключить блоки div с определенным шаблоном идентификатора?

Как я могу отключить этот div?

Моего intial мысли была что-то вдоль линий:

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

, но как вы можете сказать, что я застрял в доступе свойства идентификатора для проверки равенства.

Incidently, я использую текстовый редактор, чтобы написать это - я предполагаю, что стандартный редактор JavaScript даст список автозавершения после ввода в myDivs[i].

ответ

12

Если он имеет id, вы можете использовать document.getElementById:

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

Тогда, если он существует, вы можете удалить его (возможно, плохую идею) или скрыть его:

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

Update: Re ваш комментарий на другой ответ:

спасибо за Ваш ответ. Ваш statemt применяется к странице с iframes тоже. Этот вопрос находится в iframe. Я пробовал решение ypur, и это не сработало. может быть ссылка на страницу поможет: tennis.betfair.com ДИВ я хочу, чтобы отключить это один с идентификатором: minigamesContainer

Если элемент находится в iframe, то вы должны вызвать getElementById на документе это в iframe, так как iframe s - отдельные окна и имеют отдельные документы. Если вы знаете id из iframe, вы можете использовать document.getElementById, чтобы получить экземпляр iframe, а затем использовать contentDocument для доступа к его документ, а затем использовать getElementById на , что получить элемент «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) { 
    } 
} 

(try/catch существует из-за потенциальной ошибки безопасности, обращающейся к содержимому iframe, я не знаю Greasemonkey достаточно хорошо, чтобы знать, применим ли к ней SOP.Я склоняюсь к тому, что это не так, но лучше безопасно .. ,)

Если вы не знаете id о iframe или если он не один, вы можете просто перебрать все из них, получая их с document.getElementsByTagName, а затем цикл:

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

Ссылки :

+0

Это отлично работает - спасибо, но что, если вместо поиска только «alertPanel», я тоже ** хотел скрыть «alertPanel2» или «alertPanel3»? (Я пытаюсь изучить основы javascript - я немного нервничаю в эксперименте). –

1

В действительной HTML вы можете иметь только элемент с определенным идентификатором. Итак:

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

Но если вам все еще нужно перебирать все Див и проверьте их идентификаторы, то это должно работать:

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

Обратите внимание, что элемент с 'Видимость: hidden' занимает место на экране, даже если не показано, тогда как элемент с' дисплея: none' не делает. – kba