2013-02-12 3 views
6

Я хочу скрыть элемент <h1>, используя простой javascript, а не jQuery, не добавляя id="whatever" или class="whatever" к тегу. Это возможно?


Почему я не могу добавить id = "безотносительно" к тегу?
Я использую UIButton в xCode, который при нажатии на него вводит javascript в UIWebView. Внутри этого UIWebView есть элемент H1, который находится на веб-сайте, к которому у меня нет доступа, чтобы добавить <h1 id="whatever">. Надеюсь, это имеет смысл.Скрыть элемент H1 с помощью JavaScript

+0

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

+0

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

+1

@harsha: это не сработает. 'getElementsByTagName()' возвращает 'array' элементов. Вы забыли индекс. – Cerbrus

ответ

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

Обратите внимание, что это вызовет ошибку, если нет присутствия 'H1'. Поэтому будьте осторожны, чтобы использовать его в глобальном скрипте. – David

1

вы можете использовать getElementsByTagName

document.getElementsByTagName("h1") 

Но это будет доступ ко всем h1 элементов, поэтому более конкретный доступ к нему по index как этот

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

[w3fools] (http://www.w3fools.com). Этот сайт полон неточностей. – Cerbrus

3

Используйте getElementsByTagName, чтобы скрыть сначала h1 на вашей странице:

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

Или, чтобы скрыть их все:

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

Или еще лучше, если вы можете изменить CSS:

h1{ 
    display:none; 
} 

Для решения JavaScript, пожалуйста, имейте в виду, что они только будут когда DOM загружен.

Добавить слушателя domready событий, как это:

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

'window.onload' является sooo медленно, используя его, гарантирует неприятный прыжок страницы. Лучше поставить скрипт под 'H1'. – David

+0

@ Давид: это тоже сработает. Вы знаете, лучше ли событие 'domready'? – Cerbrus

+0

@Cerbus да, намного лучше. 'window.onload' также ожидает, что все изображения в документе закончат загрузку. Но размещение тегов сценариев под элементами DOM, которые будут обрабатываться, всегда является самым быстрым (но не всегда практичным). – David

4

Вы можете использовать getElementsByTagName метод:

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

Где context является document или более конкретный родительский узел вы хотите найти ваши заголовки внутри.

Однако есть лучшее решение. Вы можете добавить определенный класс в какой-то родительский узел и скрыть дочерние заголовки с помощью CSS:

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

OP заявил, что не может добавить 'id' в свои теги. Я думаю, что безопасно принимать одинаковые подсчеты для классов: _ «Внутри этого UIWebView есть элемент H1, который находится на веб-сайте, на котором у меня нет доступа» _ – Cerbrus

+0

Я имел в виду, что он мог бы добавить класс к родительскому узлу через JS ' context.className = "без заголовков" '. Должен был сказать это. – dfsq

+0

Это вариант, да. Спасибо за разъяснение^_^ – Cerbrus

1

только небольшое изменение в коде dfsq в

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

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

Итерация над 'document.getElementsByTagNameNS ('h1')' _AND_ получение 'document.getElementsByTagNameNS ('h1')' в цикле _same_ for? Нет, просто ... Нет. Кроме того, почему 'getElementsByTagNameNS'? Почему «item (i)»? Это похоже на то, что вы пытаетесь избежать соглашения по назначению. – Cerbrus

Смежные вопросы