|
Общий предок
Как получить общего предка двух элементов (в DOM'е)? Есть простые способы, или нужно самому писать?
|
нужно самому писать
|
Если по классу как-то так наверное, набросок:
function parent(class1,class2){ var e=document.getElementsByClassName(class1)[0]; while((e=e.parentNode)&&!e.getElementsByClassName(class2)[0]); return e } |
Не удивлён, однако...
|
Нет классов. Два абсолютно любых элемента. С какой стороны лучше подступиться?
|
Я думаю, общий смысл должен быть таким:
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; }; |
от, только толсто, много циклов, но работает
<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> |
Это я написал)) Я просто надеялся... А вдруг! Как-то проше... Но нет. Жестокая реальность показала смехотворную необоснованность моих надежд.
|
Slawaq, о боже, что это??
|
Всё можно оптимизировать, потом покажу как.)
|
Часовой пояс GMT +3, время: 23:14. |
|