2013-02-12 10 views
6

Chcę ukryć element <h1> za pomocą zwykłego javascript, a nie jQuery, bez dodawania do tagu id="whatever" lub class="whatever". czy to możliwe?


Dlaczego nie mogę po prostu dodać id = "whatever" do tagu?
Używam UIButton w xCode, który po kliknięciu wstrzykuje javascript do UIWebView. Wewnątrz tego interfejsu UIWebView znajduje się element H1 znajdujący się na stronie internetowej, do której nie mam dostępu, aby dodać <h1 id="whatever">. Mam nadzieję, że to ma sens.Ukryj element H1 za pomocą JavaScript

+0

document.getElementsByTagName ("H1") [0] .style.display = "none"; –

+0

http://jsbin.com/ubeduj/1/edit – C5H8NNaO4

+1

@harsha: to nie zadziała. 'getElementsByTagName()' zwraca 'tablicę' elementów. Zapomniałeś indeksu. – Cerbrus

Odpowiedz

5
document.getElementsByTagName('h1')[0].style.display = 'none'; 
+1

Zauważ, że spowoduje to błąd, jeśli nie ma "H1". Uważaj więc, aby użyć go w globalnym skrypcie. – David

1

można użyć getElementsByTagName

document.getElementsByTagName("h1") 

Ale będzie to dostęp do wszystkich h1 elementy, tak aby być bardziej konkretny niego dostęp przez index jak ten

document.getElementsByTagName("h1")[0].style.display = "none"; 
+0

[w3fools] (http://www.w3fools.com). Ta strona jest pełna niedokładności. – Cerbrus

3

użytkowania getElementsByTagName aby ukryć najpierw h1 na swojej stronie:

document.getElementsByTagName("h1")[0].style.display = "none"; 
//        ^index 0, so that's the first `h` that's found. 

lub je ukryć wszystko:

var headers = document.getElementsByTagName("h1"); 
for (var i = 0, l = headers.length; i < l; i++;) { 
    headers[i].style.display = "none"; 
} 

lub nawet jeszcze lepiej, jeśli można modyfikować CSS:

h1{ 
    display:none; 
} 

dla rozwiązań JavaScript, proszę pamiętać, że tylko oni będą działa po załadowaniu DOM.

Dodaj słuchacza domready zdarzeń, takich jak to:

window.addEvent('domready', function() { 
    // modify your DOM here. 
}); 
+0

'window.onload' jest bardzo wolny, a użycie go zagwarantuje nieprzyjemny skok strony. Lepiej umieścić skrypt poniżej "H1". – David

+0

@ David: to też zadziała. Czy wiesz, czy zdarzenie 'domready' jest lepsze? – Cerbrus

+0

@Cerbus tak, znacznie lepiej. 'window.onload' również czeka, aż wszystkie obrazy w dokumencie zakończą ładowanie. Jednak umieszczanie znaczników skryptów poniżej elementów DOM, które będą manipulowane, jest zawsze najszybsze (ale nie zawsze praktyczne). – David

4

Można użyć getElementsByTagName metody:

var h = context.getElementsByTagName('h1'); 
for (var i = h.length; i--;) { 
    h[i].style.display = 'none'; 
} 

Gdzie context jest document lub bardziej konkretny węzeł nadrzędny chcesz wyszukać swoje nagłówki wewnątrz.

Istnieje jednak lepsze rozwiązanie. Można dodać konkretną klasę do jakiegoś węzła nadrzędnego i ukryć nagłówków podrzędnych z CSS:

.without-headers h1 {display: none;} 
+0

OP stwierdził, że nie może dodać "id" do swoich tagów. Myślę, że można bezpiecznie założyć to samo dla klas: _ "Wewnątrz tego UIWebView jest element H1, który znajduje się na stronie internetowej, do której nie mam dostępu" _ – Cerbrus

+0

Miałem na myśli, że mógłby dodać klasę do węzła nadrzędnego za pośrednictwem JS. context.className = "bez nagłówków" '. Powinienem to powiedzieć. – dfsq

+0

To opcja, tak. Dzięki za wyjaśnienie^_^ – Cerbrus

1

tylko niewielkich zmian w kodzie dfsq za

var h = document.getElementsByTagName('h1'); 

for (var i =0; i<h.length; i++) { 
    document.getElementsByTagName('h1').item(i).style.display = 'none'; 
    } 
+0

Iterowanie przez 'document.getElementsByTagNameNS ('h1')' _AND_ pobieranie 'document.getElementsByTagNameNS ('h1')' w pętli _same_ for? Nie, tylko ... Nie. Dlaczego również 'getElementsByTagNameNS'? Dlaczego 'item (i)'? To tak jakbyś starał się uniknąć celowej konwencji. – Cerbrus

Powiązane problemy