treeview_keyboard.js

来自「精美的AJAX树形菜单」· JavaScript 代码 · 共 235 行

JS
235
字号
function qzjl(){
	if(qqPa.qzfw==0){
		return qqPa.qzai;
		};

	var qzjf=qqPa.qzal.parentNode;
	qqPa.qzfw--;

	for(var qzba=0;qzba<qzjf.childNodes.length;qzba++){
		if(qzjf.childNodes[qzba].nodeName=='TABLE'){
			qqPa.qzap=qzba;
			}
		else if(qzjf.childNodes[qzba]==qqPa.qzal){
			break;
			};
		}

	;
	qqPa.qzal=qzjf;
	qqPa.qzai=qqPa.qzal.childNodes[qqPa.qzap];
	return qqPa.qzai;
	}
;
function qzlf(){
	qzaq=qzer(false,true);
	var qzmd;

	do{
		qzmd=qzaq;
		qzaq=qzer(true,true);
		}
	while(qzmd!=qzaq);

	var qzut=qqPa.qzo(qzdu(qqPa.qzai.id));

	if(qzut.Expanded&&qzut.ChildIndices.length>0){
		return qzlf();
		};
	return qqPa.qzai;
	}
;
function qzub(){
	if(qqPa.qzap>0){
		for(qqPa.qzap--;qqPa.qzap>=0;qqPa.qzap--){
			if(qqPa.qzal.childNodes[qqPa.qzap].nodeName=='TABLE'){
				break;
				};
			}
		;
		qqPa.qzai=qqPa.qzal.childNodes[qqPa.qzap];
		var qzut=qqPa.qzo(qzdu(qqPa.qzai.id));
		if(qzut.Expanded&&qzut.ChildIndices.length>0){
			return qzlf();
			};
		}
	else if(qqPa.qzfw>0){
		return qzjl();
		};
	return qqPa.qzai;
	}
;
function qzer(qzya,qzAbh){
	var qzhy=null,qzs=0;
	if(qqPa.qzal.childNodes.length>qqPa.qzap+1&&qqPa.qzal.childNodes[qqPa.qzap+1].nodeName=='DIV'){
		if(qqPa.qzal.childNodes.length>qqPa.qzap+2&&qqPa.qzal.childNodes[qqPa.qzap+2].nodeName=='DIV'){
			qzs=qqPa.qzap+2;
			qzhy=qqPa.qzal.childNodes[qzs];
			}
		else{
			qzs=qqPa.qzap+1;
			qzhy=qqPa.qzal.childNodes[qzs];
			};
		};
	if(!qzhy){
		return;
		};
	if(!qzya&&qzhy.style.display!='none'&&qzhy.childNodes.length>0){
		qqPa.qzal=qzhy;
		qqPa.qzai=qqPa.qzal.childNodes[0];
		qqPa.qzap=0;
		qqPa.qzfw++;
		}
	else if(qqPa.qzal.lastChild!=qzhy){
		qqPa.qzap=qzs+1;
		qqPa.qzai=qqPa.qzal.childNodes[qqPa.qzap];
		}
	else if(!qzAbh&&qqPa.qzfw>0){
		for(var qzbc=qqPa.qzad;qzbc!=null;qzbc=qqPa.qzo(qzbc.ParentStorageIndex)){
			if(!qzbc.qzvn()){
				qzjl();
				return qzer(true);
				};
			}
		;
		};

	return qqPa.qzai;
	}
;
function qzpp(){
	var qzbu=document.getElementById(qqPa.TreeViewID+"_div");
	qqPa.qzal=qzbu;
	qqPa.qzai=qqPa.qzal.childNodes[0];
	qqPa.qzap=0;
	qqPa.qzfw=0;
	return qqPa.qzai;
	}
;
function ComponentArt_KeyMoveHome(){
	var qzar=qqPa.qzai,qzaq=qzpp();
	qzAgv(qzaq);
	qzco(qzar,qzaq);
	}
;
function ComponentArt_KeyMoveEnd(){
	var qzar=qqPa.qzai,qzmd=qzpp(),qzst=null;

	while(qzmd!=qzst){
		qzmd=qzst;
		qzst=qzer(true,true);
		}

	;
	var qzaq=qzlf();
	qzAgv(qzaq);
	qzco(qzar,qzaq);
	}
;
function ComponentArt_KeyMoveDown(){
	var qzar=qqPa.qzai,qzaq=qzer();
	qzAgv(qzaq);
	qzco(qzar,qzaq);
	}
;
function ComponentArt_KeyMoveUp(){
	var qzar=qqPa.qzai,qzaq=qzub();
	qzAgv(qzaq);
	qzco(qzar,qzaq);
	}
;
function ComponentArt_KeyMoveLeft(){
	var qzss=qzvk(qqPa.qzai);
	if(qzss&&qzss.style.display!='none'){
		qzqp(qqPa,qzss,qqPa.qzad);
		}
	else{
		var qzar=qqPa.qzai,qzaq=qzjl();
		qzco(qzar,qzaq);
		};
	}
;
function ComponentArt_KeyMoveRight(){
	if(qqPa.qzad.ChildIndices.length>0||(qqPa.qzad.ContentCallbackUrl&&qqPa.qzad.ContentCallbackUrl!='')){
		var qzhy=qzvk(qqPa.qzai);
		if(qzhy&&qzhy.style.display=='none'){
			qzzn(qqPa,qzhy,qqPa.qzad,qqPa.qzfw);
			}
		else{
			var qzar=qqPa.qzai,qzaq=qzer();
			qzco(qzar,qzaq);
			};
		};
	}
;
function qzco(qzar,qzaq){
	qzar.onmouseout();
	qqPa.qzfj.onmouseout();
	if(qqPa.qzai){
		qqPa.qzad=qqPa.qzo(qzdu(qqPa.qzai.id));
		qqPa.qzfj=document.getElementById(qqPa.qzai.id+'_cell');
		qzaq.onmouseover();
		qqPa.qzfj.onmouseover();
		};

	qqPa.qzkj=1;
	}
;
function qzAex(qzt,qzm,qzcd){
	var qzar=qzt.qzai;
	qzt.qzad=qzm;
	qzt.qzai=qzcd;
	qzt.qzal=qzcd.parentNode;
	qzt.qzfw=qzm.qzcu;
	for(var qzba=0;qzba<qzt.qzal.childNodes.length;qzba++){
		if(qzt.qzal.childNodes[qzba]==qzcd){
			qzt.qzap=qzba;
			break;
			};
		}
	;
	qzt.qzfw=qzm.CalculateDepth();
	qqPa=qzt;
	qzco(qzar,qzcd);
	}
;
function ComponentArt_SetKeyboardFocusedTree(qzAjw,qzwz){
	if(qqPa&&qqPa==qzwz)
		return;
	if(qqPa){
		var qzrr=document.getElementById(qqPa.TreeViewID+"_div");
		if(qzrr)
			qzrr.className=qqPa.CssClass;
		};
	qqPa=qzwz;

	if(qzwz.FocusedCssClass!='')
		qzAjw.className=qzwz.FocusedCssClass;
	}
;
function ComponentArt_InitKeyboard(qzt){
	var qzbu=document.getElementById(qzt.TreeViewID+"_div");
	ComponentArt_SetKeyboardFocusedTree(qzbu,qzt);
	qzt.KeyboardEnabled=true;
	qzt.qzad=qzt.Nodes()[0];
	qzt.qzfj=document.getElementById(qzt.TreeViewID+'_item_0_cell');
	qzt.qzal=qzbu;
	qzt.qzai=qzt.qzal.childNodes[0];
	qzt.qzap=0;
	qzt.qzfw=0;
	ComponentArt_RegisterKeyHandler(qzt,'Enter','ComponentArt_SelectKeyItem()');
	ComponentArt_RegisterKeyHandler(qzt,'(','ComponentArt_KeyMoveDown()');
	ComponentArt_RegisterKeyHandler(qzt,'&','ComponentArt_KeyMoveUp()');
	ComponentArt_RegisterKeyHandler(qzt,'\'','ComponentArt_KeyMoveRight()');
	ComponentArt_RegisterKeyHandler(qzt,'%','ComponentArt_KeyMoveLeft()');
	ComponentArt_RegisterKeyHandler(qzt,'$','ComponentArt_KeyMoveHome()');
	ComponentArt_RegisterKeyHandler(qzt,'#','ComponentArt_KeyMoveEnd()');
	document.onkeydown=ComponentArt_ProcessKeyPress;
	}
;
function ComponentArt_SelectKeyItem(){
	qzrb(qqPa,qqPa.qzad,qqPa.qzai,qqPa.qzfj);
	}
;
var ComponentArt_TreeView_Keyboard_Loaded=true;

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?