Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 23.05.2012, 07:40
Интересующийся
Отправить личное сообщение для AlexJ Посмотреть профиль Найти все сообщения от AlexJ
 
Регистрация: 02.06.2009
Сообщений: 20

Как сменить название класса у всех элементов
Задача - имеется некоторое количество элементов на странице с классом X. Как у таковых элементов сменить класс на Y? Подозреваю, что это вообще можно сделать одной строчкой.
Через getElementsByClass чтото не получается, догадываюсь почему.
Ответить с цитированием
  #2 (permalink)  
Старый 23.05.2012, 08:38
Профессор
Отправить личное сообщение для bot87 Посмотреть профиль Найти все сообщения от bot87
 
Регистрация: 16.05.2011
Сообщений: 307

getElementsByClass не работает в ие http://caniuse.com/getelementsbyclassname ,но есть вариант эмуляции.
Сменить класс элемента для новых браузеров можно через classList .
Для всех используя
Element.className='имя класса'
__________________
Я только учусь.Ногами просьба не бить
Ответить с цитированием
  #3 (permalink)  
Старый 23.05.2012, 09:02
Интересующийся
Отправить личное сообщение для AlexJ Посмотреть профиль Найти все сообщения от AlexJ
 
Регистрация: 02.06.2009
Сообщений: 20

да не в этом дело
function changeclass(classoff,classto)
{
var elems = getElementsByClass(classoff);
for (var i = 0; i < elems.length; i++)
elems[i].className = classto;
}
Функция по какойто причине меняет класс только у каждого второго элемента. При смене класса массив elems коверкается? Я проверял, любое другое действие с элементами на ура. А смена класса с каждым вторым.
Ответить с цитированием
  #4 (permalink)  
Старый 23.05.2012, 09:25
Аватар для Gvozd
Матрос
Отправить личное сообщение для Gvozd Посмотреть профиль Найти все сообщения от Gvozd
 
Регистрация: 04.04.2008
Сообщений: 6,246

Сообщение от AlexJ
При смене класса массив elems коверкается?
если вы используете встроенный в браузер document.getElementsByClassName(), то скорее всего так и есть, ведь он же возвращает NodeList, который прочно связан с DOM-деревом и изменяется вместе с ним.
В вашем случае происходит следующее:
1) вы взяли нулевой элемент NodeList, и изменили ему классю
2) так как у него теперь нету того класса, по которомы вы искали, то весь elems перестраивается: из него удаляется нулевой элемент, а все остальные смещаются влево.
3) теперь когда вы берет 1-й элемент elems, то на самом деле вы берете второй элемент от исходного массива.
так, на каждой итерации, elems уменьшается на один элемент, и вы идете только по четным элементам.

так что скопируйте elems в обычный массив, прежде чем делать такие операции, либо попробуйте применить forEach из прототипа массивов, хотя может и не удастся(зачеркнутый вариант оказался нерабочим, как я и думал)

Последний раз редактировалось Gvozd, 23.05.2012 в 09:29.
Ответить с цитированием
  #5 (permalink)  
Старый 23.05.2012, 09:33
Аватар для vadim5june
Студент
Отправить личное сообщение для vadim5june Посмотреть профиль Найти все сообщения от vadim5june
 
Регистрация: 30.04.2012
Сообщений: 1,113

попробуйте вместо цикла for цикл while
while(elems.length>0)
elems[0].className = classto;
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как записать id всех элементов в массив? SunYang Общие вопросы Javascript 21 06.02.2010 22:50
Событие change для всех элементов exvion jQuery 2 25.01.2010 18:18
Как получить список всех установленных плагинов VitAngel Internet Explorer 0 15.07.2009 09:13
Как снять фокус со всех элементов? Logo Общие вопросы Javascript 7 02.07.2009 23:53
Как присвоить текст строке состояния для всех браузеров? Tend Общие вопросы Javascript 4 14.05.2009 16:38