Получить положение деления в иерархии - PullRequest
2 голосов
/ 05 марта 2011

Я работаю с JavaScript, и мне нужно найти позицию div для всего дерева DOM.Когда мне дается одно и то же дерево, мне нужно знать прохождение, начинающееся с корня, которое приведет нас к тому div, который мы рассматриваемПожалуйста, не стесняйтесь задавать вопросы.

Приветствия.

Ответы [ 2 ]

0 голосов
/ 05 марта 2011

Зависит от того, что вы хотите вернуть.Проще начать с узла и идти к корню, чем наоборот.

function descent(who, ret){
    var A= [];
    while(who.parentNode){      
        A[A.length]= ret? who: who.nodeName;
        who= who.parentNode;
    }
    return A.reverse();
}

/ *

test

var what= document.getElementById('funblurb1') 

descent(what)>>
HTML,BODY,DIV,DIV

descent(what,1)>>
[object HTMLHtmlElement],[object HTMLBodyElement],

[object HTMLDivElement],[object HTMLDivElement]

* /

0 голосов
/ 05 марта 2011

Это может привести вас на правильный путь.Я не уверен на 100% в охвате браузера getAttribute, поэтому при необходимости протестируйте его в целевых браузерах.

getNodeAndParent = function(o) {
    var nodeTarget,strParents,strNodeName,strNodeId,strNodeClass,strReturnValue;
    if (o.constructor === String) {
        nodeTarget = document.getElementById(o);
        if (nodeTarget === undefined) {
            throw "You must specify a valid node ID";
        }
    }
    else {
        nodeTarget = o;
    }
    strNodeName = nodeTarget.nodeName
    strNodeId = nodeTarget.getAttribute('id');
    strNodeClass = nodeTarget.className;
    strReturnValue = strNodeName + (strNodeId ? '#' + strNodeId : '') + (strNodeClass ? '.' + strNodeClass : '');
    if (strNodeName.toLowerCase() !== 'html') {
        strReturnValue = getNodeAndParent(nodeTarget.parentNode) + ' > ' + strReturnValue;
    }

    return strReturnValue;
}

//Example:
getNodeAndParent('prettify-lang');

В случае запуска этого вопроса на этой странице вопроса в Firebug вы получите "HTML > BODY.question-page > DIV.container > DIV#content > DIV#prettify-lang"

...