本文实例讲述了JavaScript生成SQL查询表单的方法。分享给大家供大家参考。具体如下:
这里使用JavaScript生成复杂的SQL查询表单,运行一下就明白了,它可以根据选择的查询条件,自动修改你的SQL语句,是一个很典型的应用。
运行效果截图如下:
具体代码如下:
<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\"
\"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">
<head>
<meta http-equiv=\"Content-Type\" content=\"text/html; charset=gb2312\" />
<title>查询条件表单</title>
<style>
*{
font-size:12px;
padding:0;
margin:0;
}
body{
padding:40px;
}
#MainBox{
border:#666 1px solid;
background-color:#eee;
width:700px;
}
#MainBox td{
padding:4px;
}
#ConditionBox{
height:150px;
width:100%;
overflow-y:auto;
border:#bbb 1px solid;
padding:2px;
background-color:#fff;
}
.tmFrame{
border:#eee 1px solid;
padding:2px;
width:100%;
}
.tmFrame_highlight{
border:#666 1px solid;
padding:2px;
width:100%;
background-color:#f7f7f7;
}
.fname{
float:left;
width:200px;
}
.conn{
float:left;
width:100px;
}
.fvalue{
float:left;
width:100px;
}
.handlebox{
float:right;
width:180px;
display:none;
}
.handlebox_view{
float:right;
width:180px;
display:block;
}
.rbox{
float:right;
margin:1px;
background-color:#999;
color:#fff;
padding:1px;
width:15px;
cursor:hand;
}
legend{
border:#bbb 1px solid;
padding:4px;
}
fieldset{
border:#bbb 1px solid;
padding:4px;
}
.sqlwords{
margin:2px;
border:#bbb 1px solid;
width:100%;
}
</style>
<script>
////构造函数
function ce(e){return document.createElement(e)}
/* Example:
* var a = cex(\"DIV\", {onmouseover:foo, name:\'div1\', id:\'main\'});
*/
function cex(e, x){
var a = ce(e);
for (prop in x){
a[prop] = x[prop];
}
return a;
}
/*
* function ge
* Shorthand function for document.getElementById(i)
*/
function ge(i){return document.getElementById(i)}
/*
* function ac
* Example: ac( house, ac(roof, shingles), ac(floor, ac(tiles, grout)))
*/
function ac(){
if (ac.arguments.length > 1){
var a = ac.arguments[0];
for (i=1; i<ac.arguments.length; i++){
if (arguments[i])
a.appendChild(ac.arguments[i]);
}
return a;
} else {
return null;
}
}
/////ID增量
function guid(){
if (!window.__id) window.__id = 0;
return ++window.__id;
}
//======建立条件类
function term(tname,fname,conn,fvalue,ttype){
this.tname=tname;
this.fname=fname;
this.conn=conn;
this.fvalue=fvalue;
this.id= guid();
this.ttype=ttype;
}
term.prototype.getHTML = function(){
var termFrame = cex(\"DIV\", {
id:this.id,
className:\'tmframe\',
onmouseover:this.fc_term_onmouseover(),
onmouseout:this.fc_term_onmouseout()
});
//var module = cex(\"DIV\", {
//id:\'module\'+this.id,
//className:\'module\'
//});
var tttt=this.tname+\".\"+this.fname;
if(this.ttype!=\'fset\')
tttt=this.tname;
var mtt = cex(\"input\", {
id:\'tp\'+this.id,
name:\'fname\'+this.id,
type:\"hidden\",
value:this.ttype
});
var fname = cex(\"DIV\", {
id:\'fname\'+this.id,
className:\'fname\',
innerHTML:tttt
});
var conn = cex(\"DIV\", {
id:\'conn\'+this.id,
className:\'conn\',
innerHTML:this.conn
});
var fvalue = cex(\"DIV\", {
id:\'fvalue\'+this.id,
className:\'fvalue\',
innerHTML:this.fvalue
});
var handlebox = cex(\"div\", {
id:\'handlebox\'+this.id,
className:\"handlebox\"
});
var mdel = cex(\"div\", {
id:\'tmdel\'+this.id,
onclick:this.fc_mdel_onclick(),
className:\"rbox\",
title:\"删除此条件\",
innerHTML: \'X\'
});
var mup = cex(\"div\", {
id:\'tmup\'+this.id,
onclick:this.fc_mup_onclick(),
className:\"rbox\",
title:\"向上移动\",
innerHTML: \'↑\'
});
var mdown = cex(\"div\", {
id:\'tmdown\'+this.id,
onclick:this.fc_mdown_onclick(),
className:\"rbox\",
title:\"向下移动\",
innerHTML: \'↓\'
});
var mzkh = cex(\"div\", {
id:\'tzkh\'+this.id,
onclick:this.fc_mzkh_onclick(),
className:\"rbox\",
title:\"添加左括号\",
innerHTML: \'(\'
});
var mykh = cex(\"div\", {
id:\'tykh\'+this.id,
onclick:this.fc_mykh_onclick(),
className:\"rbox\",
title:\"添加右括号\",
innerHTML: \')\'
});
var mand = cex(\"div\", {
id:\'tand\'+this.id,
onclick:this.fc_mand_onclick(),
className:\"rbox\",
title:\"添加并条件\",
innerHTML: \'and\'
});
var mor = cex(\"div\", {
id:\'tor\'+this.id,
onclick:this.fc_mor_onclick(),
className:\"rbox\",
title:\"添加或条件\",
innerHTML: \'or\'
});
// Build DIV
ac (termFrame,
mtt,
ac (handlebox,
mdel,
mup,
mdown,
mykh,
mzkh,
mand,
mor
),
fname,
conn,
fvalue
);
return termFrame;
}
term.prototype.highlight = function(){
ge(\"handlebox\"+this.id).className = \'handlebox_view\';
ge(this.id).className = \'tmFrame_highlight\';
}
term.prototype.lowlight = function(){
ge(\"handlebox\"+this.id).className = \'handlebox\';
ge(this.id).className = \'tmFrame\';
}
term.prototype.remove = function(){
var _this = ge(this.id);
_this.parentNode.removeChild(_this);
}
term.prototype.moveup = function(){
var _this = ge(this.id);
var pre_this = _this.previousSibling;
if(pre_this!=null){
_this.parentNode.insertBefore(_this,pre_this);
this.lowlight();
}
}
term.prototype.movedown = function(){
var _this = ge(this.id);
var next_this = _this.nextSibling;
if(next_this!=null){
_this.parentNode.insertBefore(next_this,_this);
this.lowlight();
}
}
term.prototype.addzkh = function(){
var _this = ge(this.id);
var tzkh = new term(\'╭----------------\',\'\',\'\',\'\',\'zkh\');
var node_zkh = tzkh.getHTML();
_this.parentNode.insertBefore(node_zkh,_this);
}
term.prototype.addykh = function(){
var _this = ge(this.id);
var tykh = new term(\'╰----------------\',\'\',\'\',\'\',\'ykh\');
var node_ykh = tykh.getHTML();
if(_this.nextSibling!=null)
_this.parentNode.insertBefore(node_ykh,_this.nextSibling);
else
_this.parentNode.appendChild(node_ykh);
}
term.prototype.addand = function(){
var _this = ge(this.id);
var tand = new term(\' 并且\',\'\',\'\',\'\',\'tand\');
var node_and = tand.getHTML();
if(_this.nextSibling!=null)
_this.parentNode.insertBefore(node_and,_this.nextSibling);
else
_this.parentNode.appendChild(node_and);
}
term.prototype.addor = function(){
var _this = ge(this.id);
var tor = new term(\' 或者\',\'\',\'\',\'\',\'tor\');
var node_or = tor.getHTML();
if(_this.nextSibling!=null)
_this.parentNode.insertBefore(node_or,_this.nextSibling);
else
_this.parentNode.appendChild(node_or);
}
///对象控制函数
term.prototype.fc_term_onmouseover = function(){
var _this = this;
return function(){
//if (!_this.isDragging)
_this.highlight();
}
}
term.prototype.fc_term_onmouseout = function(){
var _this = this;
return function(){
//if (!_this.isDragging)
_this.lowlight();
}
}
term.prototype.fc_mdel_onclick = function(){
var _this = this;
return function(){
_this.remove();
}
}
term.prototype.fc_mup_onclick = function(){
var _this = this;
return function(){
_this.moveup();
}
}
term.prototype.fc_mdown_onclick = function(){
var _this = this;
return function(){
_this.movedown();
}
}
term.prototype.fc_mzkh_onclick = function(){
var _this = this;
return function(){
_this.addzkh();
}
}
term.prototype.fc_mykh_onclick = function(){
var _this = this;
return function(){
_this.addykh();
}
}
term.prototype.fc_mand_onclick = function(){
var _this = this;
return function(){
_this.addand();
}
}
term.prototype.fc_mor_onclick = function(){
var _this = this;
return function(){
_this.addor();
}
}
/////插入页面
function insertterm(){
var tname = document.all.tname.value;
var fname = document.all.fname.value;
var conn = document.all.conn.value;
var fvalue = document.all.fvalue.value;
//xl(tname+\"|\"+fname+\"|\"+conn+\"|\"+fvalue);
var tm = new term(tname,fname,conn,fvalue,\"fset\");
var tmHTML = tm.getHTML();
ac(ge(\"ConditionBox\"),tmHTML);
//ZA.addterm(tm);
addtofrom(tname);
}
var tt = new Array();
function addtofrom(tname){
var ttexit=\"no\";
for(var i=0;i<tt.length;i++){
if(tt[i]==tname)
ttexit=\"yes\";
}
if(ttexit==\"no\"){
tt[i]=tname;
//alert(tt[i]);
}
}
//====条件控制窗口函数
function CBadd(){
var h = document.all.ConditionBox.offsetHeight;
document.all.ConditionBox.style.height = h + 20 + \"px\";
}
function CBcut(){
var h = document.all.ConditionBox.offsetHeight;
if(h>=150)
document.all.ConditionBox.style.height = h - 20 + \"px\";
else
return false;
}
function getSQL(){
var sql=\"\";
var ma = ge(\"ConditionBox\").childNodes;
for(i=0;i<ma.length;i++){
var id = ma[i].getAttribute(\"id\");
var tp = ge(\"tp\"+id).value;
if(tp==\"fset\"){
//sql+=\" \"+ge(\"fname\"+id).innerHTML;
//sql+=\" \"+ge(\"conn\"+id).innerHTML;
//sql+=\" \\\"\"+ge(\"fvalue\"+id).innerHTML+\"\\\"\";
var fname=ge(\"fname\"+id).innerHTML;
var conn=ge(\"conn\"+id).innerHTML;
var fvalue=ge(\"fvalue\"+id).innerHTML;
sql+=\" \"+fname;
if(conn==\"等于\")
sql+=\" = \"+\"\\\'\"+fvalue+\"\\\'\";
if(conn==\"大于\")
sql+=\" > \"+\"\\\'\"+fvalue+\"\\\'\";
if(conn==\"小于\")
sql+=\" < \"+\"\\\'\"+fvalue+\"\\\'\";
if(conn==\"不等于\")
sql+=\" <> \"+\"\\\'\"+fvalue+\"\\\'\";
if(conn==\"为空\")
sql+=\" is null \";
if(conn==\"不为空\")
sql+=\" is not null \";
if(conn==\"包含\")
sql+=\" like \\\'%\"+fvalue+\"%\\\'\";
}
else{
//sql+=\" \"+ge(\"fname\"+id).innerHTML;
if(tp==\"zkh\")
sql+=\" (\";
if(tp==\"ykh\")
sql+=\" )\";
if(tp==\"tand\")
sql+=\" and\";
if(tp==\"tor\")
sql+=\" or\";
}
//var mn = ma.childNodes;
}
var ffrom = \"FROM \"+getFrom();
ge(\"sqlwords\").value =\"Select * \"+ ffrom+\" Where \"+sql;
}
function getFrom(){
var ff=tt.toString();
return ff;
}
</script>
</head>
<body>
<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\" id=\"MainBox\">
<tr>
<td colspan=\"2\" style=\"background-color:#999;color:#000;font-weight:bolder;font-size:14px\">复杂查询表单</td>
</tr>
<tr>
<td><div id=\"ConditionBox\"></div>
<div style=\"width:100%\"><SPAN title=\'放大显示框\' style=\'float:right;FONT-SIZE: 14px; CURSOR: hand;FONT-FAMILY: webdings\' onclick=\'CBadd()\'>6</SPAN><SPAN title=\'缩小显示\' style=\'float:right;FONT-SIZE: 14px; CURSOR: hand;FONT-FAMILY: webdings\' onclick=\'CBcut()\'>5</SPAN></div></td>
</tr>
<tr>
<td>
<fieldset>
<legend>SQL表达式</legend>
<input type=\"text\" id=\"sqlwords\" class=\"sqlwords\" /><input type=\"submit\" name=\"Submit\" value=\"GET SQL\" onclick=\"getSQL()\" style=\"float:right\"/>
</fieldset>
</td>
</tr>
<tr>
<td>
<fieldset>
<legend>定义条件</legend>
<table width=\"100%\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\">
<tr>
<td>表</td>
<td><select name=\"tname\" id=\"tname\">
<option value=\"table1\" selected=\"selected\">表1</option>
<option value=\"table2\">表2</option>
<option value=\"table3\">表3</option>
<option value=\"table4\">表4</option>
<option value=\"table5\">表5</option>
</select></td>
<td>字段</td>
<td><select name=\"fname\" id=\"fname\">
<option value=\"f1\">字段1</option>
<option value=\"f2\">字段2</option>
<option value=\"f3\">字段3</option>
<option value=\"f4\">字段4</option>
<option value=\"f5\">字段5</option>
<option value=\"f6\">字段6</option>
<option value=\"f7\">字段7</option>
</select></td>
<td>关系</td>
<td><select name=\"conn\" id=\"conn\">
<option value=\"大于\">大于</option>
<option value=\"等于\">等于</option>
<option value=\"小于\">小于</option>
<option value=\"不等于\">不等于</option>
<option value=\"为空\">为空</option>
<option value=\"不为空\">不为空</option>
<option value=\"包含\">包含</option>
</select></td>
<td>值</td>
<td><input name=\"fvalue\" type=\"text\" id=\"fvalue\" value=\"111111\" /></td>
<td><input type=\"submit\" name=\"Submit\" value=\"增加新条件\" onclick=\"insertterm()\"/></td>
</tr>
</table>
</fieldset>
</td>
</tr>
</table>
</body>
</html>
希望本文所述对大家的javascript程序设计有所帮助。
本文地址:https://www.stayed.cn/item/3414
转载请注明出处。
本站部分内容来源于网络,如侵犯到您的权益,请 联系我