ASP.Net TreeView Expandir / Contraer todo no funciona cuando los iconos de nodo están presentes

StackOverflow https://stackoverflow.com/questions/1639258

Pregunta

He usado el siguiente código js para expandir / contraer todos los nodos de un control ASP.Net TreeView:

// handle tree - this doesn't seem to work when the tree contains node images
function TreeviewExpandCollapseAll(treeViewId, expandAll) {
    var displayState = (expandAll == true ? "none" : "block");
    var treeView = document.getElementById(treeViewId);
    if (treeView) {
        var treeLinks = treeView.getElementsByTagName("a");
        var nodeCount = treeLinks.length;
        alert(nodeCount);

        for (i = 0; i < nodeCount; i++) {
            if (treeLinks[i].firstChild.tagName) {
                if (treeLinks[i].firstChild.tagName.toLowerCase() == "img") {
                    var currentToggleLink = treeLinks[i];
                    var childContainer = GetParentByTagName("table", currentToggleLink).nextSibling;
                    if (childContainer.style.display == displayState) {
                        eval(currentToggleLink.href);
                    }
                }
            }
        } //for loop ends
    }
}

//utility function to get the container of an element by tagname
function GetParentByTagName(parentTagName, childElementObj) {
    var parent = childElementObj.parentNode;
    while (parent.tagName.toLowerCase() != parentTagName.toLowerCase()) {
        parent = parent.parentNode;
    }
    return parent;
} 

El problema es que cuando tengo NodeStyle-ImageUrl = " img / FolderSmall.gif " , la expansión falla después de abrir el primer nodo secundario, SOLO cuando hay imágenes de nodo presentes.

El error JS es childContainer es nulo:

                    if (childContainer.style.display == displayState) {
                        eval(currentToggleLink.href);

Estoy seguro de que alguien más se ha encontrado con esto, pero todo el código que he encontrado para expandir / colapsar falla en el mismo punto.

¿Fue útil?

Solución

Esto es realmente desde hace un tiempo, pero si recuerdo correctamente, simplemente incluí un marcador de posición de imagen de 1px para no devolver nulo en ninguna llamada.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top