亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

層序遍歷在ExtJs的TreePanel中的應(yīng)用

 更新時間:2009年10月16日 22:20:38   作者:  
今天幫朋友解決了一個問題:使用ExtJs的TreePanel控件,如何得到樹的第一個葉子節(jié)點的信息。

原理非常簡單,就是樹的層序遍歷,在遍歷過程中遇到第一個葉子節(jié)點即完成工作。

效果如下圖:

代碼如下:

復(fù)制代碼 代碼如下:

var currentRootNode = null;//當(dāng)前選擇的根節(jié)點
function NodeClass()
{ //定義一個節(jié)點類
var nodeValue = null;
var nextNode = null;//下一個節(jié)點
}
function InitQueue(queue)
{ //初始化一個隊列
queue = new NodeClass();//頭節(jié)點為空
return queue;
}
function Empty(queue)
{ //判斷一個隊列為空
var returnValue = false;
if(queue.nextNode == null)
{
returnValue = true;
}
return returnValue;
}
function EnQueue(queue,x)
{ //入隊操作
var returnValue = queue;
var currentNode = queue;//頭節(jié)點
while(currentNode.nextNode != null)
{//current 一直到來到最后一個元素
currentNode = currentNode.nextNode; //
}
var tempNode = new NodeClass(); //生成一個新的元素,并且值為X
tempNode.nodeValue = x;
currentNode.nextNode = tempNode; //插入到最后
return returnValue;
}
function DeQueue(queue)
{ //出隊操作
var returnValue = null;
if(queue.nextNode != null)
{ //如果隊列非空
if(queue.nextNode.nextNode == null)
{ //如果是最后一個元素(即使隊頭又是隊尾,只有一個元素)
returnValue = queue.nextNode.nodeValue; //取得該元素的值
queue.nextNode = null;//將頭指針的queue的nextNode設(shè)置為NULL
}
else
{
returnValue = queue.nextNode.nodeValue; //取得該元素的值
queue.nextNode = queue.nextNode.nextNode; //將第二個元素的指針賦給queue的nextNode,相當(dāng)于刪除了第一個元素
}
}
return returnValue; //返回被刪除的第一個元素的值
}
function GetHead(queue)
{ //獲得隊頭元素的值
return queue.nextNode.nodeValue;
}
function Clear(queue)
{ //清空一個隊列
queue.nextNode = null;
queue.nodeValue = null;
}
function Current_Size(queue)
{ //獲得當(dāng)前隊列的大小
var returnValue = 0;
var currentNode = queue.nextNode;//頭結(jié)點
while(currentNode != null)
{ //從頭往尾計算
returnValue++;
currentNode = currentNode.nextNode; //指向下一個元素
}
return returnValue; //返回大小
}
function findFirstCheafNode()
{
var childNodes = null;
var targetNode = null;//待查找的目標(biāo)葉子節(jié)點
var queue = null;//輔助隊列
queue = InitQueue(queue);//初始化隊列
queue = EnQueue(queue,currentRootNode);//根節(jié)點入隊列
while (!Empty(queue))
{//只要隊列不空
node = DeQueue(queue);//出隊列
if (node.hasChildNodes())
{//非葉子節(jié)點
childNodes = node.childNodes;
//其孩子節(jié)點從左到右依次入隊列
for (var i = 0,len = childNodes.length; i < len ; ++i)
{
queue = EnQueue(queue,childNodes[i]);
}
}
else
{//找到第一個葉子節(jié)點
return node;
}
}
}
Ext.onReady(function()
{
var tree = new Ext.tree.TreePanel({
el: 'treeDiv',
useArrows: true,
autoScroll: true,
animate: true,
enableDD: true,
containerScroll: true,
border: false,
// auto create TreeLoader
loader: new Ext.tree.TreeLoader({dataUrl:'Level1.txt'})
});
var rootID = '0';
var rootnode = new Ext.tree.AsyncTreeNode({
id : rootID,
text : '鐵道部',
draggable : false,// 根節(jié)點不容許拖動
expanded : false
});
// 為tree設(shè)置根節(jié)點
tree.setRootNode(rootnode);
tree.render();
tree.on('click',function(node,event)
{//查詢樹的第一個葉子節(jié)點
currentRootNode = node;
var targetNode = findFirstCheafNode();
Ext.MessageBox.alert("info","當(dāng)前根節(jié)點是: "+currentRootNode.text + " 它下面的第一個葉子節(jié)點是: " + targetNode.text);
});
}); var childNodes = null;
var targetNode = null;//待查找的目標(biāo)葉子節(jié)點
var queue = null;//輔助隊列
queue = InitQueue(queue);//初始化隊列
queue = EnQueue(queue,currentRootNode);//根節(jié)點入隊列
while (!Empty(queue))
{//只要隊列不空
node = DeQueue(queue);//出隊列
if (node.hasChildNodes())
{//非葉子節(jié)點
childNodes = node.childNodes;
//其孩子節(jié)點從左到右依次入隊列
for (var i = 0,len = childNodes.length; i < len ; ++i)
{
queue = EnQueue(queue,childNodes[i]);
}
}
else
{//找到第一個葉子節(jié)點
return node;
}
}
}
Ext.onReady(function()
{
var tree = new Ext.tree.TreePanel({
el: 'treeDiv',
useArrows: true,
autoScroll: true,
animate: true,
enableDD: true,
containerScroll: true,
border: false,
// auto create TreeLoader
loader: new Ext.tree.TreeLoader({dataUrl:'Level1.txt'})
});
var rootID = '0';
var rootnode = new Ext.tree.AsyncTreeNode({
id : rootID,
text : '鐵道部',
draggable : false,// 根節(jié)點不容許拖動
expanded : false
});
// 為tree設(shè)置根節(jié)點
tree.setRootNode(rootnode);
tree.render();
tree.on('click',function(node,event)
{//查詢樹的第一個葉子節(jié)點
currentRootNode = node;
var targetNode = findFirstCheafNode();
alert("當(dāng)前根節(jié)點是: "+currentRootNode.text + " 它下面的第一個葉子節(jié)點是: " + targetNode.text);
});
});

相關(guān)文章

  • ExtJS中文亂碼之GBK格式編碼解決方案及代碼

    ExtJS中文亂碼之GBK格式編碼解決方案及代碼

    這幾天做后臺看了一些Ext的知識,在切入工作項目的時候出現(xiàn)了亂碼情況,所以就總結(jié)了這篇ExtJS中文亂碼之GBK格式編碼解決辦法的文章,遇到此問題的朋友可以參考一下,希望本文對你有所幫助
    2013-01-01
  • Extjs gridpanel 出現(xiàn)橫向滾動條問題的解決方法

    Extjs gridpanel 出現(xiàn)橫向滾動條問題的解決方法

    Extjs gridpanel 出現(xiàn)橫向滾動條問題的解決方法,在gridpanel中加入以下代碼即可。
    2011-07-07
  • EXT中xtype的含義分析

    EXT中xtype的含義分析

    根據(jù)我在論壇上的觀察,xtype用起來的時候疑惑會比較多。甚至有些人根本忽略xtype,或者不清楚它是什么。所以我決定闡述一下這個xtype的概念。
    2010-01-01
  • ExtJs 學(xué)習(xí)筆記 Hello World!

    ExtJs 學(xué)習(xí)筆記 Hello World!

    最近學(xué)ajax,接觸到了Extjs這個強(qiáng)大的框架。我想通過我的學(xué)習(xí)筆記,最后可以讓大家上手在項目中使用Ext。首先我會寫一些基本的用于入門Ext的文章,打好基礎(chǔ)是很重要的。
    2008-12-12
  • 解決Extjs4中form表單提交后無法進(jìn)入success函數(shù)問題

    解決Extjs4中form表單提交后無法進(jìn)入success函數(shù)問題

    form表單提交后無法進(jìn)入success函數(shù)的問題,很是常見,下面有個不錯的解決方法,感興趣的朋友可以參考下
    2013-11-11
  • ExtJS 2.0 實用簡明教程之布局概述

    ExtJS 2.0 實用簡明教程之布局概述

    所謂布局就是指容器組件中子元素的分布、排列組合方式。Ext的所有容器組件都支持而局操作,每一個容器都會有一個對應(yīng)的布局,布局負(fù)責(zé)管理容器組件中子元素的排列、組合及渲染方式等。
    2009-04-04
  • Extjs grid添加一個圖片狀態(tài)或者按鈕的方法

    Extjs grid添加一個圖片狀態(tài)或者按鈕的方法

    extjs的grid中我們經(jīng)常需要添加一個圖片狀態(tài)或者按鈕,下面將自己用過的一些方法與大家分享下
    2014-04-04
  • extjs 學(xué)習(xí)筆記(二) Ext.Element類

    extjs 學(xué)習(xí)筆記(二) Ext.Element類

    上個系列中,我們用到了Ext.fly來獲得一個Element對象,其實Ext.fly是Ext.Element.fly的簡寫形式。類似的方法還有一個Ext.get,是Ext.Element.get的簡寫。這兩個方法都可以用使用Dom元素或者Dom元素的id作為參數(shù)來獲得一個Element對象。
    2009-10-10
  • ExtJs使用IFrame的實現(xiàn)代碼

    ExtJs使用IFrame的實現(xiàn)代碼

    Iframe 有的時候還是須要的,比如在Tab中嵌入報表、嵌入其它系統(tǒng)的界面。下面代碼是項目中一段。希望對用ExtJS開發(fā)的兄弟做個參考。
    2010-03-03
  • extjs fckeditor集成代碼

    extjs fckeditor集成代碼

    用extjs實現(xiàn)的集成fckeditor的代碼。
    2009-05-05

最新評論