• Страница 1 из 1
  • 1
Форум Studio AD » Сайтостроение » Общий форум по Javascript » Выполнение условия
Выполнение условия
lewonchik
Дата: Среда, 21.12.2011, 10:21 | Сообщение # 1
молчун
Группа: Проверенные
Пользователь №: 220
Сообщений: 45
Есть такая конструкция:
Code
<div id="block$ID$">
            // Что то ещё...
            <div class="class1"></div>
            // Что то ещё...
              <div class="myclass" style="width:100px;height:100px; background-color:#333333;"></div>
            // Что то ещё...
</div>
<br />
<div id="block$ID$">
            // Что то ещё...
            <div class="class2"></div>
            // Что то ещё...
              <div class="myclass" style="width:100px;height:100px; background-color:#333333;"></div>
            // Что то ещё...
</div>
Подскажите - как реализовать такое условие:
Если в блоке с id block$ID$ есть див с классом class1 то див с классом myclass в этом же блоке меняет класс на myclass2, а если есть див с классом class2 то див с классом myclass меняет класс на myclass3. А то всю голову уже сломал.

Если можно то jQ + аналог на чистом js.




Сообщение отредактировал lewonchik - Среда, 21.12.2011, 20:38
  
Crasher
Дата: Среда, 21.12.2011, 15:43 | Сообщение # 2
говорун
Группа: Проверенные
Пользователь №: 3179
Сообщений: 256
Получено оценок: 3
lewonchik, если я правильно понял:
Code
<script>
if (documentGetElementById('block$ID$').children[0].className=='class1')
    documentGetElementById('block$ID$').children[1].className='myclass2';
else
    documentGetElementById('block$ID$').children[1].className='myclass3';
</script>


  
lewonchik
Дата: Среда, 21.12.2011, 18:32 | Сообщение # 3
молчун
Группа: Проверенные
Пользователь №: 220
Сообщений: 45
Crasher, я не зря указал в коде
Code
// Что то ещё...
ты обращаешься к потомкам согласно их очерёдности в коде, нужно без жёсткой привязки к их очерёдности т.к. варьируется количество строк в коде. Т.е. выше и/или ниже дива с классом class1, а так же дива с классом myclass может быть ещё несколько строк кода.




Сообщение отредактировал lewonchik - Среда, 21.12.2011, 18:34
  
Crasher
Дата: Среда, 21.12.2011, 21:30 | Сообщение # 4
говорун
Группа: Проверенные
Пользователь №: 3179
Сообщений: 256
Получено оценок: 3
lewonchik,
Code

<script>
if (document.getElementById('block$ID$').getElementsByClassName('class1'))
    document.getElementById('block$ID$').getElementByClassName('myclass').className='myclass2';
else
    document.getElementById('block$ID$').getElementByClassName('myclass').className='myclass3';
</script>

или
Code

<script>
document.getElementById('block$ID$').getElementByClassName('myclass').className=(document.getElementById('block$ID$').getElementsByClassName ('class1')?'myclass2':'myclass3') //не уверен, работает ли
</script>


  
lewonchik
Дата: Среда, 21.12.2011, 22:05 | Сообщение # 5
молчун
Группа: Проверенные
Пользователь №: 220
Сообщений: 45
Crasher, Не работает, пишет ошибку:
Uncaught TypeError: Cannot call method 'getElementByClassName' of null


  
Crasher
Дата: Четверг, 22.12.2011, 00:26 | Сообщение # 6
говорун
Группа: Проверенные
Пользователь №: 3179
Сообщений: 256
Получено оценок: 3
lewonchik, извини, не проверял просто :)
Code
<script>
document.getElementById('block$ID$').getElementsByClassName('myclass')[0].className=(document.getElementById('block$ID$').getElementsByClassName('class1')?'myclass2':'myclass3')
</script>

а так?




Сообщение отредактировал Crasher - Четверг, 22.12.2011, 00:34
  
lewonchik
Дата: Четверг, 22.12.2011, 00:53 | Сообщение # 7
молчун
Группа: Проверенные
Пользователь №: 220
Сообщений: 45
Crasher, работает но очень криво - от тупо меняет класс myclass во всех дивах на класс myclass2 и всё. Условие не выполняется.

  
lewonchik
Дата: Четверг, 22.12.2011, 01:01 | Сообщение # 8
молчун
Группа: Проверенные
Пользователь №: 220
Сообщений: 45
Дело в том что блоков с id block$ID$ на странице 10 штук, нужно чтобы скрипт выполнял условие в каждом блоке, а не тек как сейчас - нашёл первое совпадение и применил условие ко всем дивам с классом myclass без исключения.

  
Crasher
Дата: Четверг, 22.12.2011, 01:47 | Сообщение # 9
говорун
Группа: Проверенные
Пользователь №: 3179
Сообщений: 256
Получено оценок: 3
lewonchik, проблема в том, что компонентов с одинаковым классом может быть множество, а компонентов с одним id быть не может, т.к. их просто невозможно обрабатывать будет.
если заменить id на class, тоесть <div id="block$ID$"> на <div class="block$ID$">, тогда можно будет обработать все контейнеры цыклом:
Code
<script>
for (var i=0;i<document.getElementsByClassName('block$ID$').length;i++)
      document.getElementsByClassName('block$ID$')[i].getElementsByClassName('myclass')[0].className=(document.getElementsByClassName('block$ID$')[i].getElementsByClassName('class1')?'myclass2':'myclass3')
</script>




Сообщение отредактировал Crasher - Четверг, 22.12.2011, 01:49
  
lewonchik
Дата: Четверг, 22.12.2011, 10:01 | Сообщение # 10
молчун
Группа: Проверенные
Пользователь №: 220
Сообщений: 45
Crasher, у них разный id, $ID$ в конце это цифра, т.е. block$ID$ это block1....block10001.

  
lewonchik
Дата: Четверг, 22.12.2011, 10:20 | Сообщение # 11
молчун
Группа: Проверенные
Пользователь №: 220
Сообщений: 45
Всё равно не работает, условие не выполняется хоть с классом хоть с id...

  
Crasher
Дата: Четверг, 22.12.2011, 14:25 | Сообщение # 12
говорун
Группа: Проверенные
Пользователь №: 3179
Сообщений: 256
Получено оценок: 3
блин
последняя попытка :)
этот проверял - работает
Code
<script>
for (var i=0;i<document.getElementsByClassName('block$ID$').length;i++)
       document.getElementsByClassName('block$ID$')[i].getElementsByClassName('myclass')[0].className=(document.getElementsByClassName('block$ID$')[i].getElementsByClassName('class1').length?'myclass2':'myclass3')
</script>


  
lewonchik
Дата: Четверг, 22.12.2011, 14:43 | Сообщение # 13
молчун
Группа: Проверенные
Пользователь №: 220
Сообщений: 45
Crasher, спасибо, всё работает!!! А ты не мог бы этот же вариант продублировать на jquery?

  
Crasher
Дата: Четверг, 22.12.2011, 16:43 | Сообщение # 14
говорун
Группа: Проверенные
Пользователь №: 3179
Сообщений: 256
Получено оценок: 3
O_o
какая разница? обычный джаваскрипт, везде работает по-идее


  
lewonchik
Дата: Четверг, 22.12.2011, 17:28 | Сообщение # 15
молчун
Группа: Проверенные
Пользователь №: 220
Сообщений: 45
Мне jquery ближе к пониманию. Я по этому и прошу - если можешь, пожалуйста напиши аналог на jquery.

  
DSC
Дата: Четверг, 22.12.2011, 19:12 | Сообщение # 16
спикер
Группа: Проверенные
Пользователь №: 127
Сообщений: 516
Получено оценок: 41
Code
<script type="text/javascript">
$('.block$ID$ .myclass').each(function(){this.className=$('.block$ID$ .class1').length?'myclass2':'myclass3'})
</script>


aka Latro
  
lewonchik
Дата: Четверг, 22.12.2011, 21:11 | Сообщение # 17
молчун
Группа: Проверенные
Пользователь №: 220
Сообщений: 45
DSC, спасибо большое!!!

  
Форум Studio AD » Сайтостроение » Общий форум по Javascript » Выполнение условия
  • Страница 1 из 1
  • 1
Поиск:
© Studioad.ru 2006 · 2010. Использование материалов форума на сторонних ресурсах без прямой обратной ссылки строго запрещено. Хостинг от uCoz.