⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 highquery0.3.htm

📁 javascript实现一个高级组合查询控件
💻 HTM
📖 第 1 页 / 共 3 页
字号:
<!--
	 /********************************************
	 * 文件名称:highquery.htm
	 * 功能描述:高级查询控件
	 * 创建日期:2008-07-18
	 * @author:codeslave
	 * @version 0.3
	 *********************************************/
-->
<html>
<head>
<title>高级查询控件</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<link type="text/css" rel="stylesheet" href="style.css" />
<script type="text/javascript" src="check.js"></script>
<script type="text/javascript" src="calendar.js"></script>
<script type="text/javascript">
<!--
/********************************字段信息***********************************/
var arrField = new Array('Name','Date_Type','DateTime_Type','No','Remark','Detail','');
var arrAlias = new Array('名称','日期','日期时间','编号','备注','明细选项','请选择一个字段');
var arrType = new Array('varchar','date','datetime','number','varchar','varchar','');
var arrLength = new Array('100','19','19','10','500','3','0');
//-->
</script>
</head>
<body>
<table id="highQuery" class="HQ_TABLE">
<th class="HQ_TH">连接</th>
<th class="HQ_TH">左括号</th>
<th class="HQ_TH">字段</th>
<th class="HQ_TH">运算符</th>
<th class="HQ_TH">内容</th>
<th class="HQ_TH">右括号</th>
<th class="HQ_TH">操作</th>
</table>
<script type="text/javascript">
<!--
/******************************以下为初始化部分******************************/

var autoId = 0; // 自增变量

// 取得一般查询条件的html文件(日期)。
function getDateHtml(txtId)
{
	var strHtml = "<input type='button' class='HQ_BUTTON' onClick=selDate(document.getElementById('" + txtId + "')) value='选择'>";
	strHtml += "<input type='button' class='HQ_BUTTON' onClick=clearContent(document.getElementById('" + txtId + "')) value='清除'>";
	return strHtml;
}

// 取得in或not in查询条件的html文件(日期)。
function getDateInHtml(txtId)
{
	var strHtml = "<input type='button' class='HQ_BUTTON' onClick=selDateIn(document.getElementById('" + txtId + "')) value='选择'>";
	strHtml += "<input type='button' class='HQ_BUTTON' onClick=clearContent(document.getElementById('" + txtId + "')) value='清除'>";
	return strHtml;
}

// 取得一般查询条件的html文件(日期时间)。
function getDateTimeHtml(txtId)
{
	var strHtml = "<input type='button' class='HQ_BUTTON' onClick=selDateTime(document.getElementById('" + txtId + "')) value='选择'>";
	strHtml += "<input type='button' class='HQ_BUTTON' onClick=clearContent(document.getElementById('" + txtId + "')) value='清除'>";
	return strHtml;
}

// 取得in或not in查询条件的html文件(日期时间)。
function getDateTimeInHtml(txtId)
{
	var strHtml = "<input type='button' class='HQ_BUTTON' onClick=selDateTimeIn(document.getElementById('" + txtId + "')) value='选择'>";
	strHtml += "<input type='button' class='HQ_BUTTON' onClick=clearContent(document.getElementById('" + txtId + "')) value='清除'>";
	return strHtml;
}

// 取得like查询条件的html文本。
function getLikeHtml(id) 
{
	var strHtml = "<select id='darkSign_" + id + "'><option value='0'>%</option><option value='1'>_</option></select>";
	strHtml += "&nbsp;<span id='darkB_" + id + "' onClick=addDarkSign('b') style='font-weight: bold;cursor: hand'>←→</span>" + 
		"&nbsp;<span id='darkL_" + id + "' onClick=addDarkSign('l') style='font-weight: bold;cursor: hand'>←</span>" + 
		"&nbsp;<span id='darkR_" + id + "' onClick=addDarkSign('r') style='font-weight: bold;cursor: hand'>→</span>";
	return strHtml;
}

// 取得is查询条件的html文本。
function getIsHtml(id) 
{
	var strHtml = "<span id='null_" + id + "' onClick=document.getElementById('bContent_" + id + "').value='null'" + 
		" style='font-weight: bold;cursor: hand'>○</span>" + 
		"&nbsp;<span id='notNull_" + id + "' onClick=document.getElementById('bContent_" + id + "').value='not&nbsp;null'" + 
		" style='font-weight: bold;cursor: hand'>●</span>";
	return strHtml;
}

// 初始化字段列表。
function initFieldList(id)
{
	var strField = "<select onChange='changeField()' id='field_" + id + "'>";
	for(var i = 0; i < arrField.length; i++)
	{
		strField += "<option value='" + arrField[i] + "'>" + arrAlias[i] + "</option>"
	}
	strField += '</select>';
	return strField;
}

// 初始化条件相连的运算符。
function initJoin(id)
{
	var strJoin = "<select id='join_" + id + "'><option value='and'>AND</option><option value='or'>OR</option></select>";
	return strJoin;
}

// 初始化条件运算符。
function initCondition(id)
{
	var strCondition = "<select onChange='changeCondition()' id='condition_" + id + "'>" + 
		"<option value='='>=</option><option value='<'><</option>" + 
		"<option value='<='><=</option><option value='>'>></option>" +
		"<option value='>='>>=</option><option value='<>'><></option>" +
		"<option value='in'>IN</option><option value='not_in'>NOT IN</option>" + 
		"<option value='between'>BETWEEN</option><option value='is'>IS</option>" +
		"<option value='like'>LIKE</option></select>";
	strCondition += "<span id='signPanel_" + id + "'></span>" // 存放查询符号,主要用于like和is查询
	return strCondition;
}

// 初始化条件内容。
function initContent(id)
{
	var strContent = "<input class='HQ_TEXT' id='bContent_" + id + "' maxLength=" + arrLength[arrLength.length-1] + ">";
	strContent += "<span id='bChoicePanel_" + id + "'></span>"; // 存放第一个文本控件的"选择"和"清除"按钮
	strContent += "<span id='eContentPanel_" + id + "'></span>"; // 存放第二个文本控件、以及eChoicePanel面板和他内部的"选择"和"清除"按钮
	return strContent;
}

// 初始化第一行。
function initFristRow()
{
	highQuery.insertRow();
	var newRow = highQuery.rows[highQuery.rows.length - 1];
	
	newRow.id = "row_" + autoId;

	newRow.insertCell();
	newRow.cells[0].className = "HQ_TD";
	newRow.cells[0].innerHTML = "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;";

	newRow.insertCell();
	newRow.cells[1].className = "HQ_TD";
	newRow.cells[1].innerHTML = "<span id='lParenthesisPanel_" + autoId + "' style='font-weight: bold;'></span>"; // 左括号面板
	
	newRow.insertCell();
	newRow.cells[2].className = "HQ_TD";
	newRow.cells[2].innerHTML = initFieldList(autoId);
	
	newRow.insertCell();
	//newRow.cells[3].width = 200;
	newRow.cells[3].className = "HQ_TD";
	newRow.cells[3].innerHTML = initCondition(autoId);
	
	newRow.insertCell();
	newRow.cells[4].className = "HQ_TD";
	newRow.cells[4].innerHTML = initContent(autoId);

	newRow.insertCell();
	newRow.cells[5].className = "HQ_TD";
	newRow.cells[5].innerHTML = "<span id='rParenthesisPanel_" + autoId + "' style='font-weight: bold;'></span>"; // 右括号面板
	
	newRow.insertCell();
	newRow.cells[6].className = "HQ_TD";
	newRow.cells[6].innerHTML = "<input type='button' class='HQ_BUTTON' value='+(' onClick=addParenthesis('" + autoId + "','l')>&nbsp;" + 
		"<input type='button' class='HQ_BUTTON' value='+)' onClick=addParenthesis('" + autoId + "','r')>&nbsp;" +
		"<input type='button' class='HQ_BUTTON' value='-(' onClick=removeParenthesis('" + autoId + "','l')>&nbsp;" +
		"<input type='button' class='HQ_BUTTON' value='-)' onClick=removeParenthesis('" + autoId + "','r')>&nbsp;" +
		"<input type='button' class='HQ_BUTTON' value='增加条件' onClick='addRow()'>";
	
	var objField = document.getElementById("field_" + autoId); // 取得当前的字段选择控件对象
	if(objField.options.length > 0)
		objField.options.selectedIndex = objField.options.length - 1; // 选中字段列表的最后一个"请选择一个字段"

	autoId += 1; // autoId加1
}

// 初始化第一行。
initFristRow();

/******************************以下为条件增删部分******************************/

// 新添加一行。
function addRow()
{
	highQuery.insertRow();
	var newRow = highQuery.rows[highQuery.rows.length - 1];

	newRow.id = "row_" + autoId;
	
	newRow.insertCell();
	newRow.cells[0].className = "HQ_TD";
	newRow.cells[0].innerHTML = initJoin(autoId);
	
	newRow.insertCell();
	newRow.cells[1].className = "HQ_TD";
	newRow.cells[1].innerHTML = "<span id='lParenthesisPanel_" + autoId + "' style='font-weight: bold;'></span>"; // 左括号面板

	newRow.insertCell();
	newRow.cells[2].className = "HQ_TD";
	newRow.cells[2].innerHTML = initFieldList(autoId);
	
	newRow.insertCell();
	newRow.cells[3].className = "HQ_TD";
	newRow.cells[3].innerHTML = initCondition(autoId);
	
	newRow.insertCell();
	newRow.cells[4].className = "HQ_TD";
	newRow.cells[4].innerHTML = initContent(autoId);
	
	newRow.insertCell();
	newRow.cells[5].className = "HQ_TD";
	newRow.cells[5].innerHTML = "<span id='rParenthesisPanel_" + autoId + "' style='font-weight: bold;'></span>"; // 右括号面板

	newRow.insertCell();
	newRow.cells[6].className = "HQ_TD";
	newRow.cells[6].innerHTML = "<input type='button' class='HQ_BUTTON' value='+(' onClick=addParenthesis('" + autoId + "','l')>&nbsp;" + 
		"<input type='button' class='HQ_BUTTON' value='+)' onClick=addParenthesis('" + autoId + "','r')>&nbsp;" +
		"<input type='button' class='HQ_BUTTON' value='-(' onClick=removeParenthesis('" + autoId + "','l')>&nbsp;" +
		"<input type='button' class='HQ_BUTTON' value='-)' onClick=removeParenthesis('" + autoId + "','r')>&nbsp;" +
		"<input type='button' class='HQ_BUTTON' value='删除' onClick=removeRow('" + newRow.id + "')>";
	
	var objField = document.getElementById("field_" + autoId); // 取得当前的字段选择控件对象
	if(objField.options.length > 0)
		objField.options.selectedIndex = objField.options.length - 1; // 选中字段列表的最后一个"请选择一个字段"

	autoId += 1; // autoId加1
}

// 删除行。
function removeRow(rowId)
{
	var trRow = document.getElementById(rowId);
	trRow.removeNode(true);
}

// 生成条件查询语句。
function interpreter()
{
	var arrReturn = new Array();
	var strCondition = "";
	var strAliasCondition = "";
	var isNoProblem = true;
	
	// 语法检测
	if(!checkExpression())
	{
		isNoProblem = false;
		arrReturn[0] = "";
		arrReturn[1] = "";
		return arrReturn;
	}

	for(var i = 1; i < highQuery.rows.length; i++)
	{
		var id = highQuery.rows[i].id.split("_")[1];
		var objField = document.getElementById("field_" + id); // 取得字段选择控件对象
		var objCondition = document.getElementById("condition_" + id); // 取得条件运算符选择控件对象
		var objBContent = document.getElementById("bContent_" + id); // 取得第一个条件内容文件控件对象
		var objLParenthesisPanel = document.getElementById("lParenthesisPanel_" + id); // 取得左括号面板对象
		var objRParenthesisPanel = document.getElementById("rParenthesisPanel_" + id); // 取得右括号面板对象
		var strType = arrType[objField.selectedIndex]; // 内容类别
		var strAlias = arrAlias[objField.selectedIndex]; // 字段别名

		if(i > 1) // 如果不是第一个条件就要加上连接条件符号(AND,OR)。
		{
			var objJoin = document.getElementById("join_" + id); // 条件相连的运算符
			strCondition += " " + objJoin.value + " ";
			strAliasCondition +=  " " + objJoin.value + " ";
		}

		// 加上左括号
		strCondition += objLParenthesisPanel.outerText;
		strAliasCondition += objLParenthesisPanel.outerText;
			
		if(objField.value != "") // 字段是否为空
		{
			strCondition += objField.value;
			strAliasCondition += strAlias;
		}
		else

⌨️ 快捷键说明

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