Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 23.06.2011, 20:12
Аватар для trikadin
Модератор
Отправить личное сообщение для trikadin Посмотреть профиль Найти все сообщения от trikadin
 
Регистрация: 27.04.2010
Сообщений: 3,417

Общий предок
Как получить общего предка двух элементов (в DOM'е)? Есть простые способы, или нужно самому писать?
__________________
Читайте:
Ты любопытный) Всё-таки, ничему в этом мире не помешает хорошая доля юмора)
Как спросить, чтобы вам ответили
Часто Задаваемые Вопросы (FAQ)
Ответить с цитированием
  #2 (permalink)  
Старый 23.06.2011, 21:03
Профессор
Отправить личное сообщение для Sweet Посмотреть профиль Найти все сообщения от Sweet
 
Регистрация: 16.03.2010
Сообщений: 1,618

нужно самому писать
Ответить с цитированием
  #3 (permalink)  
Старый 23.06.2011, 21:07
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,480

Если по классу как-то так наверное, набросок:
function parent(class1,class2){
  var e=document.getElementsByClassName(class1)[0];
  while((e=e.parentNode)&&!e.getElementsByClassName(class2)[0]);
  return e
}
__________________
29375, 35

Последний раз редактировалось Aetae, 23.06.2011 в 21:09.
Ответить с цитированием
  #4 (permalink)  
Старый 23.06.2011, 21:27
Аватар для trikadin
Модератор
Отправить личное сообщение для trikadin Посмотреть профиль Найти все сообщения от trikadin
 
Регистрация: 27.04.2010
Сообщений: 3,417

Не удивлён, однако...
__________________
Читайте:
Ты любопытный) Всё-таки, ничему в этом мире не помешает хорошая доля юмора)
Как спросить, чтобы вам ответили
Часто Задаваемые Вопросы (FAQ)
Ответить с цитированием
  #5 (permalink)  
Старый 23.06.2011, 21:30
Аватар для trikadin
Модератор
Отправить личное сообщение для trikadin Посмотреть профиль Найти все сообщения от trikadin
 
Регистрация: 27.04.2010
Сообщений: 3,417

Нет классов. Два абсолютно любых элемента. С какой стороны лучше подступиться?
__________________
Читайте:
Ты любопытный) Всё-таки, ничему в этом мире не помешает хорошая доля юмора)
Как спросить, чтобы вам ответили
Часто Задаваемые Вопросы (FAQ)
Ответить с цитированием
  #6 (permalink)  
Старый 23.06.2011, 21:59
Профессор
Отправить личное сообщение для Sweet Посмотреть профиль Найти все сообщения от Sweet
 
Регистрация: 16.03.2010
Сообщений: 1,618

Я думаю, общий смысл должен быть таким:
function mutualParent(elem1, elem2){
  var test;
  while(elem1 !== document.body){
    elem1 = elem1.parentNode;
    test = elem2;
    while(test !== document.body){
      test = test.parentNode;
      if(test === elem1) return test;
    };
  };
  return null;
};
Ответить с цитированием
  #7 (permalink)  
Старый 23.06.2011, 22:33
Аватар для Slawaq
Профессор
Отправить личное сообщение для Slawaq Посмотреть профиль Найти все сообщения от Slawaq
 
Регистрация: 19.05.2010
Сообщений: 187

от, только толсто, много циклов, но работает
<body>
<div>
    <div id="multi-parent">
        <div>
            <div id="firstChild"></div>
        </div>
        <div>
            <div>
                <div id="secondChild"></div>
            </div>
        </div>
    </div>
</div>
<script type="text/javascript">
var $ = function(n){return document.getElementById(n);}
var getPerent = function(fe,se){
    var body = document.getElementsByTagName("body")[0];
    var parentF = fe.parentNode;
    var parentS = se.parentNode;
    var arrayParantsF = [];
    var arrayParantsS = [];
    while(true){
        if(parentF!=body){
            arrayParantsF[arrayParantsF.length]=parentF;
            parentF = parentF.parentNode;
        }else{
            break;
        }
    }
    while(true){
        if(parentS!=body){
            arrayParantsS[arrayParantsS.length]=parentS;
            parentS = parentS.parentNode;
        }else{
            break;
        }
    }
    for(i=0;i<arrayParantsF.length;i++){
        for(j=0;j<arrayParantsS.length;j++){
            if(arrayParantsF[i]==arrayParantsS[j]) return arrayParantsS[j];
        }
    }
    return body;
}
alert(getPerent($("firstChild"),$("secondChild")).id);
</script>
</body>
__________________
java.Uprise.*
Ответить с цитированием
  #8 (permalink)  
Старый 23.06.2011, 22:37
Аватар для trikadin
Модератор
Отправить личное сообщение для trikadin Посмотреть профиль Найти все сообщения от trikadin
 
Регистрация: 27.04.2010
Сообщений: 3,417

Это я написал)) Я просто надеялся... А вдруг! Как-то проше... Но нет. Жестокая реальность показала смехотворную необоснованность моих надежд.
__________________
Читайте:
Ты любопытный) Всё-таки, ничему в этом мире не помешает хорошая доля юмора)
Как спросить, чтобы вам ответили
Часто Задаваемые Вопросы (FAQ)
Ответить с цитированием
  #9 (permalink)  
Старый 23.06.2011, 22:40
Аватар для trikadin
Модератор
Отправить личное сообщение для trikadin Посмотреть профиль Найти все сообщения от trikadin
 
Регистрация: 27.04.2010
Сообщений: 3,417

Slawaq, о боже, что это??
__________________
Читайте:
Ты любопытный) Всё-таки, ничему в этом мире не помешает хорошая доля юмора)
Как спросить, чтобы вам ответили
Часто Задаваемые Вопросы (FAQ)
Ответить с цитированием
  #10 (permalink)  
Старый 23.06.2011, 22:41
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,480

Всё можно оптимизировать, потом покажу как.)
__________________
29375, 35
Ответить с цитированием
Ответ


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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Общий обработчик ошибок на весь документ. Casufi jQuery 3 10.02.2010 16:08