Дерево меню? В JS? - PullRequest
2 голосов
/ 27 мая 2010

Мне нужно древовидное меню. Но вместо просмотра списка, где вы разворачиваете / сворачиваете, мне нужен раскрывающийся список со списком, а когда вы нажимаете на элемент, мне нужно обновить окно (с первой записью «Назад»), чтобы меню оставалось в аккуратном маленьком диалоге .

У этого меню есть имя? Кто-нибудь знает, где я могу получить код для этого?

Ответы [ 2 ]

1 голос
/ 20 июня 2010

Адам прав, jQuery предлагает ассортимент меню, которое вы можете использовать. Хотя на самом деле это несколько тривиальная проблема, код для ее написания занимал бы примерно 1/10 пространства, которое займет код jQuery. Поэтому, если возможно, я бы сказал, напишите это без jQuery.

Самый эффективный метод - это сделать JS OOP (Javascript Object-Oriented), но, понятно, это запутанная тема.

В основном вы просто хотите что-то вроде:

function drillDown(){
     //Any code that multiple drilldowns 
     //  might need on the same page goes here

     //Every instance of a drillDown will 
     //  instantiate a new set of all functions/variables
     //  which are contained here

     //A reference to the parent node the dropdown is placed in
     this.parent;
     //A reference to the div the dropdown is incased in
     this.object;

     //Returns a reference to this object so it can be
     //  stored/referenced from a variable in it's
     //  superclass
     return this;
}

//Prototype Functions

//prototypes are shared by all 
//  instances so as to not double up code

//this function will build the dropdown
drillDown.prototype.build = function(parent){
    //Too lazy to write all this, but build a div and your select box
    //  Add the select box to the div, 
    //  Add the div to the parent (which is in your document somewhere) 
    var divEle = document.createElement('div');
    var inputBox = document.createElement('input');

    //code code code

    divEle.appendChild(inputBox);
    parent.appendChild(divEle);
}

//this function loads the newest dataset of
drillDown.prototype.loadNewDataSet = function(data){
    //first clear out the old list
    //  remember we have a reference to both the
    //  'object' and 'parent' by using 
    //  this.object and this.parent

    //load the data, we are going to use the text from
    //  the select boxes to load each new dataset, woo eval();
    //  If you didn't know, eval() turns a string into JS code,
    //  in this case referencing an array somewhere
    var dataSet = eval(data);


    //then loop through your list adding each new item
    for(item in dataSet){
        //add item to the list
        //change the .onClick() of each one to load the next data set

        // a la  -> 
        selectItem.onClick = function(){this.loadNewDataSet(item);};

        //if you name your datasets intelligently, 
        //  say a bunch of arrays named for their respective selectors, 
        //  this is mad easy
    }
}

//Then you can just build it
var drillDownBox = new drillDown();
drillDownBox.build(document.getElementsByTagName('body')[0]);
drillDownBox.loadNewDataSet("start");

//assuming your first dataset array is named "start",
//  it should just go

И, кстати, Адам тоже это сказал, но не был явно, это называется детализацией.

1 голос
/ 02 июня 2010

Я могу вспомнить несколько плагинов jQuery, которые могли бы удовлетворить ваши цели. Тем не менее, я бы порекомендовал jQuery iPod Style Menu (более новая версия) , что именно так и звучит Раскрывающийся список обновляется на месте, использует классную анимацию бокового скольжения и включает кнопку «Назад» (по вашему желанию). Наконец, если вам не нужна анимация, вы можете попробовать настроить многие параметры плагина. Например, установка crossSpeed в 0 может работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...