2015-12-21 3 views
0

у меня есть этот коднеспособные изменить цвета тега

<a href="" id="mainLink">Click Me</a> 
<a href="" id="mainLink2">Click Me 2</a> 

И тогда Js

var mainLinker = document.getElementsByTagName('a'); 
    for (var i = 0; i < mainLinker.length; i++) { 
     this.style.color = 'red'; 
    } 

Но я получаю эту ошибку

Cannot set property 'color' of undefined 

Пожалуйста, скажите мне, где это я делать неправильно.

+0

Он должен быть 'mainLinker [я] .style ...'. 'это 'не то, что вы думаете. – undefined

+0

В этом случае область 'this' относится к области окна или родительской области, если вы хотите изменить стиль элемента в цикле, используйте forEach или относитесь к этому элементу, как предлагал @Vohuman. – SzybkiSasza

+0

Отладка вашей программы. Остановитесь на строке 'this.style.color' и изучите' this' и посмотрите, так ли это, по вашему мнению, должно быть. –

ответ

1

this не то, что вы хотите.

Изменить тело цикла для

mainLinker[i].style.color = 'red'; 

или равноценно использовать forEach (отредактирован @ комментарий Вохуман в):

[].forEach.call(document.getElementsByTagName('a'), function(el) { 
    el.style.color = 'red'; 
}); 
+3

Вы не можете вызвать '.forEach' непосредственно на возвращаемом NodeList. Сначала вы должны преобразовать его в обычный массив. Один из вариантов: '[] .forEach.call (nodeList, function (el) {...})' – undefined

+0

@ Vohuman Упс, хорошо поймай, спасибо. – BenC

0

Вы ссылаетесь this в объекте

Ваша функция не в объекте

Это будет работать

var mainLinker = document.getElementsByTagName('a'); 
    for (var i = 0; i < mainLinker.length; i++) { 
     mainLinker[i].style.color = 'red'; 
    } 
0

Конечно ваша основная проблема с использованием this, как указано в других ответах. Но почему вы делаете это вместо того, чтобы использовать правило CSS, такие как

a { color: red; } 

Если вы хотите сделать это условное так или иначе, а затем добавить класс на более высоком уровне, например, body, чтобы контролировать его:

body.make-links-red a { color: red } 

Затем, когда вы хотите сделать ссылки красный, сделать

document.body.classList.add('make-links-red')