23.06.2011, 20:12
|
|
Модератор
|
|
Регистрация: 27.04.2010
Сообщений: 3,417
|
|
Общий предок
Как получить общего предка двух элементов (в DOM'е)? Есть простые способы, или нужно самому писать?
|
|
23.06.2011, 21:03
|
Профессор
|
|
Регистрация: 16.03.2010
Сообщений: 1,618
|
|
нужно самому писать
|
|
23.06.2011, 21:07
|
|
Тлен
|
|
Регистрация: 02.01.2010
Сообщений: 6,590
|
|
Если по классу как-то так наверное, набросок:
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.
|
|
23.06.2011, 21:27
|
|
Модератор
|
|
Регистрация: 27.04.2010
Сообщений: 3,417
|
|
Не удивлён, однако...
|
|
23.06.2011, 21:30
|
|
Модератор
|
|
Регистрация: 27.04.2010
Сообщений: 3,417
|
|
Нет классов. Два абсолютно любых элемента. С какой стороны лучше подступиться?
|
|
23.06.2011, 21:59
|
Профессор
|
|
Регистрация: 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;
};
|
|
23.06.2011, 22:33
|
|
Профессор
|
|
Регистрация: 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.*
|
|
23.06.2011, 22:37
|
|
Модератор
|
|
Регистрация: 27.04.2010
Сообщений: 3,417
|
|
Это я написал)) Я просто надеялся... А вдруг! Как-то проше... Но нет. Жестокая реальность показала смехотворную необоснованность моих надежд.
|
|
23.06.2011, 22:40
|
|
Модератор
|
|
Регистрация: 27.04.2010
Сообщений: 3,417
|
|
Slawaq, о боже, что это??
|
|
23.06.2011, 22:41
|
|
Тлен
|
|
Регистрация: 02.01.2010
Сообщений: 6,590
|
|
Всё можно оптимизировать, потом покажу как.)
__________________
29375, 35
|
|
|
|