2016-05-26 2 views
-3

Что именно не так с этим кодом?Почему getElementsByTagName не работает?

<p id="demo">Hello World!</p> 

<script> 
document.getElementsByTagName('P').style.backgroundColor = 'yellow'; 
</script> 

Цвет фона не меняется на желтый.

+10

getElementsByTagName возвращает массив, поэтому вы не можете применить свойство style. 'document.getElementsByTagName ('p') [0]' будет работать – fcalderan

+0

О да, глупо мне ... Напишите это как ответ, и я с удовольствием его приму. – super11

+1

Я думаю, что есть два миллиона дублированных сообщений именно с этим вопросом. НЕ ПОДАВАЙТЕ. Голосовать, чтобы закрыть. –

ответ

4

getElementsByTagName() возвращает массив объектов. Чтобы применить свойство style, вам нужно указать индекс inorder.

Использование

document.getElementsByTagName('p')[0].style.backgroundColor = 'yellow'; 
2

Возвращает объект, который является итерируемым как массив, на вашей странице может быть больше одного абзаца, поэтому в первой позиции будет первый тег <p>, который соответствует Javascript.

Итак, что вы хотите:

document.getElementsByTagName('P')[0].style.backgroundColor = 'yellow'; 
0
var x = document.getElementsByTagName("P"); 
    var i; 
    for (i = 0; i < x.length; i++) { 
     x[i].style.backgroundColor = "yellow"; 
    } 
+0

Зачем делать это просто, когда вы можете усложнять? :) Я не вижу причин вставлять это в цикл, когда речь заходит о моем примере. – super11

+0

@ Маркос, нет. Я никогда не говорил, что код не в порядке. Мне нужно создать один элемент, а не все. Зачем? Просто для целей тестирования. – super11

+0

Реализация стиля для всех тегов «p» имеет цикл использования. Я думаю, вы хотите стилизовать все теги p. @ super11 – hizbul25

1

В качестве альтернативы, используйте document.getElementById('demo'), если у вас есть только один элемент, чтобы манипулировать. Он не будет возвращать массив, поскольку идентификаторы являются исключительными для одного элемента.

+0

Это быстрее, когда нет массивов? – super11

+0

С этим вы выбираете только элемент '# demo', так как есть только один. –

+0

Это полностью не соответствует точке – Liam

3

Вы можете использовать консоль браузера, чтобы диагностировать подобные проблемы. Ваш код вызывает:

TypeError: document.getElementsByTagName(...).style is undefined

document.getElementsByTagName('P').style.backgroundColor = 'yellow'; 

Это означает, что все, что приходит прямо перед style либо не является объектом или это объект, но не имеет style свойство. Для того, чтобы увидеть, что это такое:

console.log(document.getElementsByTagName('P')); 

Вы увидите что это HTMLCollection, что и documentation for getElementsByTagName говорит, что это должно быть.

Короче говоря, вам нужно выбрать элемент, например, первый один:

document.getElementsByTagName('P')[0].style.backgroundColor = 'yellow'; 

Или, чтобы сделать код более надежным:

var paragraphs = document.getElementsByTagName('P'); 
if (paragraphs.length>0) { 
    paragraphs[0].style.backgroundColor = 'yellow'; 
} 
+0

Мне нравится «прочная» часть. Спасибо :) – super11

-3

document.getElementsByTagName возвращает массив элементов. Не только один элемент. Поскольку массив имеет свойство длины, вы можете выбрать конкретный элемент, как это,

var paragraphs = document.getElementsByTagName; 
    paragraph1 = paragraphs[0]; 
    paragraph1.style.cssProperty = 'css value'; 

, чтобы выбрать все элементы, которые вы цикл

for(var i = 0; i < paragraphs.length; i++){ 
    paragraph[i].style.cssProperty = 'css value' 
    } 

Осматривать эти вещи в вашем веб-консоли, как это, вы можете увидеть все элемент console.log(document.getElementsByTagName)

+3

5 других людей сказали то же самое 10 минут назад –