Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Не так работает код (https://javascript.ru/forum/events/35339-ne-tak-rabotaet-kod.html)

Marker 07.02.2013 22:52

Не так работает код
 
<table border="1">
<tr>
<td width="100" height="100" bgcolor="red">red</td>
<td width="100" height="100" bgcolor="red">red</td>
<td width="100" height="100" bgcolor="red">red</td>
</tr>
<td width="100" height="100" bgcolor="green">green</td>
<td width="100" height="100" bgcolor="green">green</td>
<td width="100" height="100" bgcolor="green">green</td>
</table>


$('button').click(function() {
$('td').each(function() {
if($('td').attr("bgcolor")=='red') {
$('td').attr("bgcolor","yellow");
};
});
});

Должно изменить цвет только у тех, у кого bgcolor = red. Но изменяет цвет у всех. Что не так?

vadim5june 07.02.2013 22:54

так попробуйте
if($(this).attr("bgcolor")=='red') {
$(this).attr("bgcolor","yellow");

Marker 07.02.2013 23:05

Да, так действительно работает. Но в чем разница, почему через this работает а так нет, ведь оба одно и тоже.

vadim5june 07.02.2013 23:09

$('td').attr("bgcolor","yellow")
Вы всем элементам td присваиваете новый цвет а не только выбранному
поэтому когда используем each нужно пользоваться для конкретного экземпляра this

Marker 07.02.2013 23:16

Ну так я ведь пишу, изменять только те td у кого bgcolor == red, или это не имеет значения? нужно всегда через this?

Marker 07.02.2013 23:16

аа.. Щас понял, спасибо


Часовой пояс GMT +3, время: 20:16.