欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

樹javascript的簡單介紹

javascript寫一顆樹

用 ajax寫一個

創(chuàng)新互聯(lián)建站專注于紅古網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗。 熱誠為您提供紅古營銷型網(wǎng)站建設(shè),紅古網(wǎng)站制作、紅古網(wǎng)頁設(shè)計、紅古網(wǎng)站官網(wǎng)定制、小程序定制開發(fā)服務(wù),打造紅古網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供紅古網(wǎng)站排名全網(wǎng)營銷落地服務(wù)。

script language="javascript" type="text/javascript"

var xmlrequest=null;

function createXMLHttpRequest()

{

if(window.XMLHttpRequest)

{

//針對IE以外的其他瀏覽器創(chuàng)建的 主要是FireFox

xmlrequest=new XMLHttpRequest();

}else if(window.ActiveXObject)

{

//主要針對IE瀏覽器的不同版本

try{

xmlrequest=new ActiveXObject("Msxml2.XMLHTTP");

}catch(e)

{

try{

xmlrequest=new ActiveXObject("Microsoft.XMLHTTP");

}catch(e)

{

}

}

}

}

function showCity()

{

createXMLHttpRequest();

var url="showCity.do";

var parentid=document.getElementById("province").value;

xmlrequest.open("post",url,true);//創(chuàng)建連接

//設(shè)置頭信息,告訴服務(wù)器如何識別請求數(shù)據(jù)

xmlrequest.setRequestHeader( "Content-Type" , "application/x-www-form-urlencoded" );

//設(shè)置響應(yīng)處理的回調(diào)函數(shù) 所謂的回調(diào)函數(shù) 就是一個專門處理服務(wù)器發(fā)回響應(yīng)的函數(shù)

//這個值只能是一個函數(shù)名 不能加上()

xmlrequest.onreadystatechange=processResponse;

//調(diào)用send方法開始發(fā)送數(shù)據(jù)

xmlrequest.send("parentid="+parentid);

}

function processResponse()

{

//readyState=1時:開始發(fā)送請求

//readyState=2時:對象請求發(fā)送完成

//readyState=3時:開始讀取服務(wù)器響應(yīng)

//readyState=4時:對象讀取服務(wù)器響應(yīng)結(jié)束

if(xmlrequest.readyState==4)//調(diào)用xmlrequest的readyState方法得到服務(wù)器發(fā)回的響應(yīng)結(jié)果

{

if(xmlrequest.status==200)

{

var userdiv=document.getElementById("cityDIV");

userdiv.innerHTML=xmlrequest.responseText;//查詢成功返回servlet的out內(nèi)容.

}

}else

{

var userdiv=document.getElementById("cityDIV");

userdiv.innerHTML="img src='image/1.gif'/";//查詢受阻時顯示等待gif動畫

}

}

/script

下面是放在body里面的

select id="province" onchange="showCity()"

option value="1"浙江/option

option value="2"湖南/option

option value="3"湖北/option

/select

div id="cityDIV"

/div

最后寫一個showCity.do的servlet用來調(diào)用數(shù)據(jù)

servlet:

public void doPost(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

response.setContentType("text/html;charset=utf-8");

request.setCharacterEncoding("utf-8");

String parentid=request.getParameter("parentid");//得到j(luò)sp頁面?zhèn)鬏斶^來您所選的省的參數(shù)

ListArea list=new AreaDao().getCity(Integer.parseInt(parentid));

//getCity()是通過傳入省參數(shù)返回一個裝有該省下所有城市列表的list集合

PrintWriter out = response.getWriter();

//以下拉框代碼輸出城市

out.println("select name='city' ");

for(int i=0;ilist.size();i++){

Area area=list.get(i);

out.println("option value='"+area.getId()+"'"+area.getName()+"/option");

}

out.println("/select ");

out.close();

}

總體思路就是如果你選擇第一個province(省)的下拉框 會觸發(fā)一個onchange的事件 然后我們將此事件觸發(fā)后 調(diào)用showCity()這個方法

執(zhí)行 ajax調(diào)用 servlet幫助查找選擇的省下面的對應(yīng)城市數(shù)據(jù),然后返回數(shù)據(jù)后,放入ID="cityDIV"的層中顯示.

大概是這樣的 如果樓主還有什么不明白的 可以找我討論討論

這個是目前在網(wǎng)站中比較流行的技術(shù) 如果樓主要簡單明了的作業(yè)js樹 那給我百度消息

JavaScript 文件目錄樹

!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" ""

head

meta http-equiv="Content-Type" content="text/html; charset=utf-8"

meta name="author" content="心夢緣ocean ocl" /

titleMy tree demo/title

style type="text/css"

/*主頁面樣式*/

.leftNav {

? width: 20%;

? height:500px;

? border:#B9E0F7 1px solid;

? margin-left: 1%;

? margin-right: 1%;

}

#footer {

color:#808080;

line-height: 1.6em;

padding: 0 0 1em 0;

}

/*我的樹樣式表*/

.treeDiv {

color: #636363;

font-size: 14px;

font-weight: normal;

background-color: #fff;

color: black;

overflow: auto;

padding: 0 0 1em 0;

overflow-x: hidden;

}

.treeNode {

white-space: nowrap;

text-indent: -14px;

margin: 6px 2px 5px 14px;

}

a.treeUnselected:hover, a.treeSelected:hover {

background-color: #BFD9ED;

text-decoration: none;

}

a.treeUnselected, a.treeSelected {

color: black;

padding: 1px 3px 1px 0;

text-decoration: none;

}

a.treeSelected {

background-color: #B9E0F7;

}

a.treeUnselected {

background-color: transparent;

}

.treeSubnodes {

display: block;

}

.treeSubnodesHidden {

display: none;

}

.treeNode img.treeNoLinkImage, .treeNode img.treeLinkImage {

height: 15px;

margin-left: 5px;

margin-right: 0px;

width: 15px;

}

.treeNode img.treeLinkImage {

cursor: pointer;

}

div.treeNode a, div.treeNode span.apiRoot {

display: inline-block;

margin-left: 24px;

text-indent: 0;

white-space: normal;

width: 95%;

word-wrap: break-word;

}

div.treeNode span.category {

cursor: pointer;

}

/style

/head

body

div class="leftNav"

div id="samplesToc"

? div id="tree" style="top: 35px; left: 0px;" class="treeDiv"

? ? div id="treeRoot" onselectstart="return false" ondragstart="return false"

? ? ? div class="treeNode"

? ? ? ? img src="../graphics/treenodeplus.gif" onclick="expandCollapse(this.parentNode)" class="treeLinkImage"

? ? ? ? span onclick="expandCollapse(this.parentNode)" class="category"目錄節(jié)點一 /span

? ? ? ? div class="treeSubnodesHidden"

? ? ? ? ?

? ? ? ? ? ? div class="treeNode"

? ? ? ? ? ? ? ? ?img src="../graphics/treenodeplus.gif" onclick="expandCollapse(this.parentNode)" class="treeLinkImage"

? ? ? ? ? ? ? ? ?span onclick="expandCollapse(this.parentNode)" class="category"目錄節(jié)點一子目錄 /span

? ? ? ? ? ? ? ? ?div class="treeSubnodesHidden"

? ? ? ? ? ? ? ? ? ? ?div class="treeNode"

? ? ? ? ? ? ? ? ? ? ? ? a href="#" class="treeUnselected" onclick="clickAnchor(this)"二級葉子結(jié)點一/a

? ? ? ? ? ? ? ? ? /div

? ? ? ? ? ? ? ? ? div class="treeNode"

? ? ? ? ? ? ? ? ? ? ? ? a href="#" class="treeUnselected" onclick="clickAnchor(this)"二級葉子結(jié)點二/a

? ? ? ? ? ? ? ? ? /div

? ? ? ? ? ? ? /div

? ? ? ? ? ? /div

? ? ? ? ?

? ? ? ? ? div class="treeNode"

? ? ? ? ? ? a href="#" class="treeUnselected" onclick="clickAnchor(this)"葉子結(jié)點一/a

? ? ? ? ? /div

? ? ? ? ? div class="treeNode"

? ? ? ? ? ? a href="#" class="treeUnselected" onclick="clickAnchor(this)"葉子結(jié)點二/a

? ? ? ? ? /div

? ? ? ? ? div class="treeNode"

? ? ? ? ? ? a href="#" class="treeUnselected" onclick="clickAnchor(this)"葉子結(jié)點三/a

? ? ? ? ? /div

? ? ? ? ? div class="treeNode"

? ? ? ? ? ? a href="#" class="treeUnselected" onclick="clickAnchor(this)"葉子結(jié)點四/a

? ? ? ? ? /div

? ? ? ? ? div class="treeNode"

? ? ? ? ? ? a href="#" class="treeUnselected" onclick="clickAnchor(this)"葉子結(jié)點五/a

? ? ? ? ? /div

? ? ? ? ? div class="treeNode"

? ? ? ? ? ? a href="#" class="treeUnselected" onclick="clickAnchor(this)"葉子結(jié)點六/a

? ? ? ? ? /div

? ? ? ? /div

? ? ? /div

? ? ? !--end block--

? ? ? div class="treeNode"

? ? ? ? img src="../graphics/treenodeplus.gif" onclick="expandCollapse(this.parentNode)" class="treeLinkImage"

? ? ? ? span onclick="expandCollapse(this.parentNode)" class="category"目錄節(jié)點二/span

? ? ? ? div class="treeSubnodesHidden"

? ? ? ? ? div class="treeNode"

? ? ? ? ? ? a href="#" class="treeUnselected" onclick="clickAnchor(this)"葉子結(jié)點一/a

? ? ? ? ? /div

? ? ? ? ? div class="treeNode"

? ? ? ? ? ? a href="#" class="treeUnselected" onclick="clickAnchor(this)"葉子結(jié)點二/a

? ? ? ? ? /div

? ? ? ? ? div class="treeNode"

? ? ? ? ? ? a href="#" class="treeUnselected" onclick="clickAnchor(this)"葉子結(jié)點三/a

? ? ? ? ? /div

? ? ? ? ? div class="treeNode"

? ? ? ? ? ? a href="#" class="treeUnselected" onclick="clickAnchor(this)"葉子結(jié)點四/a

? ? ? ? ? /div

? ? ? ? ? div class="treeNode"

? ? ? ? ? ? a href="#" class="treeUnselected" onclick="clickAnchor(this)"葉子結(jié)點五/a

? ? ? ? ? /div

? ? ? ? /div

? ? ? /div

? ? ? !--end block--

? ? /div

? /div

/div !-- end samplesToc --

/div !-- end leftNav --

div class="right content"

/div!-- end main ?content--

div id="footer" align="center"

?

/div!-- end footer--

script type="text/javascript"

var treeSelected = null;//選中的樹節(jié)點

var imgPlus = new Image();

imgPlus.src="../graphics/treenodeplus.gif";

var imgMinus = new Image();

imgMinus.src="../graphics/treenodeminus.gif";

//父節(jié)點展開事件

function expandCollapse(el)

{

//如果父節(jié)點有字節(jié)點(class 屬性為treeSubnodesHidden),展開所有子節(jié)點

if (el.className!= "treeNode"){

? return; ? ?//判斷父節(jié)點是否為一個樹節(jié)點,如果樹節(jié)點不能展開,請檢查是否節(jié)點的class屬性是否為treeNode

} ?

var child;

var imgEl;//圖片子節(jié)點,在樹展開時更換圖片

for(var i=0; i el.childNodes.length; i++)

{

? child = el.childNodes[i];

? if (child.src)

? {

? ? ? imgEl = child;

? }

? else if (child.className == "treeSubnodesHidden")

? {

? ? ? child.className = "treeSubnodes";//原來若隱藏,則展開

? ? ? imgEl.src = imgMinus.src;//更換圖片

? ? ? break;

? }

? else if (child.className == "treeSubnodes")

? {

? ? ? child.className = "treeSubnodesHidden";//原來若展開,則隱藏

? ? ? imgEl.src = imgPlus.src;//更換圖片

? ? ? break;

? }

}

}

//子節(jié)點點擊事件,設(shè)置選中節(jié)點的樣式

function clickAnchor(el)

{

selectNode(el.parentNode);

el.blur();

}

function selectNode(el)

{

if (treeSelected != null)

{

? setSubNodeClass(treeSelected, 'A', 'treeUnselected');

}

setSubNodeClass(el, 'A', 'treeSelected');

treeSelected = el;

}

function setSubNodeClass(el, nodeName, className)

{

var child;

for (var i=0; i el.childNodes.length; i++)

{

? child = el.childNodes[i];

? if (child.nodeName == nodeName)

? {

? ? ? child.className = className;

? ? ? break;

? }

}

}

/script

/body

/html

運行效果:

JS樹結(jié)構(gòu)數(shù)據(jù)的遍歷

title: JS樹結(jié)構(gòu)數(shù)據(jù)的遍歷

date: 2022-04-14

description: 針對項目中出現(xiàn)樹形結(jié)構(gòu)數(shù)據(jù)的時候,我們怎樣去操作他

項目中我們會經(jīng)常出現(xiàn)對樹形結(jié)構(gòu)的遍歷、查找和轉(zhuǎn)換的場景,比如說DOM樹、族譜、社會機構(gòu)、組織架構(gòu)、權(quán)限、菜單、省市區(qū)、路由、標(biāo)簽等等。那針對這些場景和數(shù)據(jù),我們又如何去遍歷和操作,有什么方式或者技巧可以簡化我們的實現(xiàn)思路。下面我們將針對常規(guī)出現(xiàn)的場景去總結(jié)一下我們的遍歷方式

樹的特點

1、每個節(jié)點都只有有限個子節(jié)點或無子節(jié)點;

2、沒有父節(jié)點的節(jié)點稱為根節(jié)點;

3、每一個非根節(jié)點有且只有一個父節(jié)點;

4、除了根節(jié)點外,每個子節(jié)點可以分為多個不相交的子樹;

5、樹里面沒有環(huán)路

下面的圖片表示一顆樹

在下面的JS中我們由多棵樹組成我們的數(shù)據(jù)

在這數(shù)據(jù)中我們?nèi)绾卧u判數(shù)據(jù)是否為葉節(jié)點(也就是最后一級),我們每個節(jié)點都會存在children屬性,如果不存在children屬性或者children不是一個數(shù)組或者children為數(shù)組且長度為0我們則認(rèn)為他是一個葉節(jié)點

我們針對樹結(jié)構(gòu)的操作離不開遍歷,遍歷的話又分為廣度優(yōu)先遍歷、深度優(yōu)先遍歷。其中深度優(yōu)先遍歷可以通過遞歸和循環(huán)的方式實現(xiàn),而廣度優(yōu)先遍歷的話是非遞歸的

從上往下對每一層依次訪問,在每一層中,從左往右(也可以從右往左)訪問結(jié)點,訪問完一層就進入下一層,直到?jīng)]有結(jié)點可以訪問為止。即訪問樹結(jié)構(gòu)的第n+1層前必須先訪問完第n層。

簡單的說,BFS是從根節(jié)點開始,沿著樹的寬度遍歷樹的節(jié)點。如果所有節(jié)點均被訪問,則算法中止。

所以我們的實現(xiàn)思路是,維護一個隊列,隊列的初始值為樹結(jié)構(gòu)根節(jié)點組成的列表,重復(fù)執(zhí)行以下步驟直到隊列為空:

取出隊列中的第一個元素,進行訪問相關(guān)操作,然后將其后代元素(如果有)全部追加到隊列最后。

深度優(yōu)先搜索算法(英語:Depth-First-Search,DFS)是一種用于遍歷或搜索樹或圖的算法。這個算法會盡可能深的搜索樹的分支。當(dāng)節(jié)點v的所在邊都己被探尋過,搜索將回溯到發(fā)現(xiàn)節(jié)點v的那條邊的起始節(jié)點。這一過程一直進行到已發(fā)現(xiàn)從源節(jié)點可達(dá)的所有節(jié)點為止。如果還存在未被發(fā)現(xiàn)的節(jié)點,則選擇其中一個作為源節(jié)點并重復(fù)以上過程,整個進程反復(fù)進行直到所有節(jié)點都被訪問為止

1、先序遍歷

訪問子樹的時候,先訪問根再訪問根的子樹

2、后序遍歷

訪問子樹的時候,先訪問子樹再訪問根

1、先序遍歷

先序遍歷與廣度優(yōu)先循環(huán)實現(xiàn)類似,要維護一個隊列,不同的是子節(jié)點不追加到隊列最后,而是加到隊列最前面

2、后序遍歷

后序遍歷就略微復(fù)雜一點,我們需要不斷將子樹擴展到根節(jié)點前面去,執(zhí)行列表遍歷,并且通過一個臨時對象維護一個id列表,當(dāng)遍歷到某個節(jié)點如果它沒有子節(jié)點或者它本身已經(jīng)存在于我們的臨時id列表,則執(zhí)行訪問操作,否則繼續(xù)擴展子節(jié)點到當(dāng)前節(jié)點前面

對于樹結(jié)構(gòu)的遍歷操作,其實遞歸是最基礎(chǔ),也是最容易理解的。遞歸本身就是循環(huán)的思想,所以可以用循環(huán)來改寫遞歸,以上的方式在項目中已經(jīng)廊括了大部分的場景了,我們在日常開發(fā)中可以根據(jù)場景或者需要去選擇我們的遍歷方式,或者基于此對他進行調(diào)整和優(yōu)化,至于每種方式的空間復(fù)雜度和時間復(fù)雜度我們在這個地方就不去嘗試了,各位感興趣可以自己去驗證。

廣度優(yōu)先搜索

樹的遍歷

深度優(yōu)先搜索

圖文詳解兩種算法:深度優(yōu)先遍歷(DFS)和廣度優(yōu)先遍歷(BFS)

二叉樹遍歷(前序,后序,中序,層次)遞歸與迭代實現(xiàn)JavaScript

JS樹結(jié)構(gòu)操作:查找、遍歷、篩選、樹和列表相互轉(zhuǎn)換

JavaScript,關(guān)于樹形結(jié)構(gòu)數(shù)據(jù)遍歷

var arr=[];

var fun = function(arr, key){

var result = [];

for(var i=0;iarr.length;i++) result.push(arr[i][key]);

return result;

}

//diaoyong

var result = fun(arr,"treeId");

console.log(result);

js 如何獲取新的和舊的dom樹?

1、javascript 獲取 Dom 樹比較簡單。直接獲取document 文檔對象就可以了,或者也可以直接從具體的控件對象進行獲取。

2、比較困難的是如何獲取之前舊的dom 樹對象。常見的思路是可以設(shè)置一個全局的數(shù)組變量保存之前的dom樹對象,注意此對象保存的只是引用,你做變更,之前保存的對象也是變的,因為兩者本來就是同一個對象。所以你要保存的必須是dom樹的復(fù)制對象,也就是所謂的深拷貝對象,這個是有點復(fù)雜度的,節(jié)點如果復(fù)雜的話,容易出現(xiàn)問題,要注意處理。

3、希望對你有幫助。

網(wǎng)頁名稱:樹javascript的簡單介紹
當(dāng)前路徑:http://chinadenli.net/article14/dsgdjde.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站設(shè)計公司網(wǎng)站改版品牌網(wǎng)站設(shè)計域名注冊網(wǎng)站策劃軟件開發(fā)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

外貿(mào)網(wǎng)站建設(shè)