Правила     Закладки     Карма    Календарь    Журналы    Помощь    Поиск    PDA    Чат   
        СМС-ки
   
Пейджер выключен!
 
Фильтр авторов:    показать 
  скрыть
  Закрытая темаСоздание новой темыСоздание опроса

> Обход родственников, DOM
jon378  
 ۩  [x] Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Знаток Turbo Pascal
**

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 83
Пользователь №: 24048
На форуме: 6 лет, 6 месяцев, 5 дней
Карма: 1




Как обойти всех братьев элемента, находящегося на два уровня выше чем
this
?



Спустя 16 минут, 11 секунд (22.12.2011 - 21:52) killer8080 написал(а):
var childs = this.parentNode.parentNode.parentNode.childNodes;
for(var i = 0; i < childs.length; i++){
// childs[i]
}

Спустя 4 минуты, 41 секунда (22.12.2011 - 21:57) jon378 написал(а):
Это я уже пробовал -
Uncaught exception: TypeError: Cannot convert 'this.parentNode' to object

Спустя 1 минута, 30 секунд (22.12.2011 - 21:58) killer8080 написал(а):
jon378
а на что указывает this? Может это не элемент DOM?

Спустя 6 минут, 36 секунд (22.12.2011 - 22:05) jon378 написал(а):
this указывает на <option/> И к первому родителю (то есть к <select>) обращаться можно. А вот к дедушке через папу - не получается. Дедушка - это <td>

Спустя 7 минут, 32 секунды (22.12.2011 - 22:13) killer8080 написал(а):
Цитата (jon378 @ 22.12.2011 - 21:05)
this указывает на <option/>

уверен? Интересно какое события ты умудрился привинтить к option.
Сделай
alert(this.tagName);
чтобы убедится.

Спустя 5 минут, 8 секунд (22.12.2011 - 22:18) jon378 написал(а):
Ох, ёлки... Ундефинид... Спасибо, буду искать другой путь.

Спустя 1 минута, 46 секунд (22.12.2011 - 22:19) killer8080 написал(а):
jon378
покажи код, может че подскажу. smile.gif

Спустя 15 минут (22.12.2011 - 22:34) Oyeme написал(а):
$(this).parent().parent()

Спустя 11 минут, 11 секунд (22.12.2011 - 22:46) jon378 написал(а):
Постарался лишнее убрать:
<tr id="tr_1_1">
<
td>
<
select>
<
option onClick="trNoColor(1,1)" value="0" />Преподаватель/Дисциплина
<?php
for ($p = 1; $p<=5; $p++) {
echo '
<option value="'
.$plan[$p]['plan_id'].'" onClick="trColor(1,1)" />'.$plan[$p]['prep_disc'];
}
?>
</select>
</
td>
</
tr>


И функция:
function trNoColor(i,j) {
var thisSelect = this.parentNode;
//var thisTd = thisSelect.parentNode; //пробовал и так...
//var thisTd = this.parentNode.parentNode; //...и так

alert(this.tagName);
var flag = 1;
var k = 0;
while (thisTd.childNodes[k] != thisTd.lastChild) {
if (thisTd.childNodes[k].value != 0) {
flag = 0;
}
k++;
}
if (flag == 1) {
trId = 'tr_'+i+'_'+j;
document.getElementById(trId).bgColor='E4F5FF';
}
}


Здесь в двух словах, надо изменить bgColor у <tr>, но только если все дяди селекта, по которому onClick, имеют value=0

Спустя 12 минут, 11 секунд (22.12.2011 - 22:58) jon378 написал(а):
Цитата (Oyeme @ 22.12.2011 - 19:34)
$(this).parent().parent()

Это JS или PHP?

Спустя 57 минут, 32 секунды (22.12.2011 - 23:55) forza написал(а):
это библиотека Jquery -)

Спустя 7 часов, 39 минут, 25 секунд (23.12.2011 - 07:35) jon378 написал(а):
А если без Jquery? Я и так уже много чего прицепил, а ресурс расчитан на пользователей с медленным соединением, боюсь что грузится долго будет.

Спустя 2 часа, 22 минуты, 21 секунда (23.12.2011 - 09:57) Oyeme написал(а):
Один раз файлик скачать весов 37kb,и после того он закеширеутся - это много? laugh.gif

Спустя 1 минута, 48 секунд (23.12.2011 - 09:59) killer8080 написал(а):
jon378
теперь понятно, ссылку на селект нужно передавать аргументом вызова события, и вешать обработчик нужно на селект, но никак не на опшин.
<tr id="tr_1_1">
<td>
<select
onClick="trNoColor(1,1, this)">
<option
value="0" />Преподаватель/Дисциплина</option>
<?php

for ($p = 1; $p<=5; $p++) {
echo '
<option value="'
.$plan[$p]['plan_id'].'">'.$plan[$p]['prep_disc'].'</option>';
}
?>
</select>
</td>
</tr>

function trNoColor(i,j, select) {
var thisSelect = this.parentNode;
//var thisTd = thisSelect.parentNode; //пробовал и так...
//var thisTd = this.parentNode.parentNode; //...и так

alert(this.tagName);
var flag = 1;
var k = 0;
while (thisTd.childNodes[k] != thisTd.lastChild) {
if (thisTd.childNodes[k].value != 0) {
flag = 0;
}
k++;
}
if (flag == 1) {
trId = 'tr_'+i+'_'+j;
document.getElementById(trId).bgColor='E4F5FF';
}
}


Поясни какие ноды ты собирался там искать? У тебя же там только один селект?

Спустя 1 час, 18 минут, 56 секунд (23.12.2011 - 11:18) jon378 написал(а):
Я неверно написал - деди не селекта, а опшена должны иметь value=0. Количество селектов динамически меняется от 1 до 4. И если у всех селектов value=0, нужно сменить цвет у <tr>. Если же хотя бы один селект сменит value на значение, отличное от 0, то нужно снова сменить цвет <tr>

Спустя 2 минуты, 55 секунд (23.12.2011 - 11:21) jon378 написал(а):
Цитата (Oyeme @ 23.12.2011 - 06:57)
Один раз файлик скачать весов 37kb,и после того он закеширеутся - это много? laugh.gif

Просто я с JQuery не разу не работал, думал оно тяжелое. Обязательно попробую.

Спустя 12 минут, 37 секунд (23.12.2011 - 11:33) killer8080 написал(а):
jon378
можно так
  <td>
<select
onchange="trNoColor(this)">
<option
value="0" />Преподаватель/Дисциплина</option>
<?php

for ($p = 1; $p<=5; $p++) {
echo '
<option value="'
.$plan[$p]['plan_id'].'">'.$plan[$p]['prep_disc'].'</option>';
}
?>
</select>
</td>
</tr>

function trNoColor(select) {
var td = select.parentNode;
var selects = td.getElementsByTagName('select');
for(var i = 0; i < selects.length; i++){
if(selects[i].value != 0 ){
td.style.backgroundColor = '#E4F5FF'; // цвет фона если селект не в нуле
return;
}
}

td.style.backgroundColor = '#FFF'; // цвет поумолчанию
}

Инструменты нужно использовать по задаче. Если нужно только один раз на странице сделать простое действие, то тянуть для этого фреймворк как минимум глупо.
К тому же если только начал учить js, то сначала изучи нативный синтаксис, а не ищи легкие пути, чтоб потом не понимать как оно вообще работает.

Спустя 7 минут, 15 секунд (23.12.2011 - 11:41) jon378 написал(а):
Цитата (killer8080 @ 23.12.2011 - 08:33)
Инструменты нужно использовать по задаче. Если нужно только один раз на странице сделать простое действие, то тянуть для этого фреймворк как минимум глупо.
К тому же если только начал учить js, то сначала изучи нативный синтаксис, а не ищи легкие пути, чтоб потом не понимать как оно вообще работает.

Ну вот и я собственно про то же.

killer8080, большое спасибо.
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:

Опции темы Закрытая темаСоздание новой темыСоздание опроса