2008年3月27日星期四
2008年3月26日星期三
ORA-01461: can bind a LONG value only for insert into a LONG column
原来好好的
突然报这样的错误
检查数据库驱动的版本是不是跟数据库一致,升级数据库驱动,问题没有再出现
C# 写日志到文件
using System.Collections.Generic;
using System.Text;
using System.Windows.Forms;
using System.IO;
namespace psms.util
{
class Log
{
/// <summary>
/// 写日志文件
/// </summary>
/// <param name="sMsg"></param>
public static void WriteLog(string sMsg)
{
if (sMsg != "")
{
//Random randObj = new Random(DateTime.Now.Millisecond);
//int file = randObj.Next() + 1;
string filename = DateTime.Now.ToString("yyyyMM") + ".log";
try
{
FileInfo fi = new FileInfo(Application.StartupPath + "\\log\\" + filename);
if (!fi.Exists)
{
using (StreamWriter sw = fi.CreateText())
{
sw.WriteLine(DateTime.Now + "\n" + sMsg + "\n");
sw.Close();
}
}
else
{
using (StreamWriter sw = fi.AppendText())
{
sw.WriteLine(DateTime.Now + "\n" + sMsg + "\n");
sw.Close();
}
}
}
catch(Exception ex)
{
Console.WriteLine(ex.Message);
}
}
}
}
}
2008年3月25日星期二
Struts 禁用的错误
页面中有几个数据项用struts的<html:select>标签展示,今天提出新的需求,要不允许修改这几个<html:select>,那就禁用咯,这样问题发现了,这个页面是来自action,给<html:select>对应actionForm中的属性付了值,页面显示<html:select>自然就选中被赋值的选项,但是提交表单的时候,数据保存的确总是<html:select>列表中的第一个值,如果去掉禁用,就正常了。晕。
试着在onload中用js禁用也不行
在网上搜到一个这样的写法,实现readonly了<select onbeforeactivate="return false" onfocus="this.blur()" onmouseover="this.setCapture()" onmouseout="this.releaseCapture()">
</select>
不过要用到<html:select>中要把onbeforeactivate="return false" 去掉,<html:select>不认识这个属性,不过效果还是实现了。
2008年3月23日星期日
相当相当隐蔽的错误 org.hibernate.hql.ast.QuerySyntaxException: unexpected token
今天周末,被头儿过来改bug
其中一个在hql查询的时候报org.hibernate.hql.ast.QuerySyntaxException: unexpected token: ApplyInfo near line 1, column 23这样的错误,貌似看起来hibernate不认识ApplyInfo这个映射持久类,但是这个类非常确定的是已经映射了,而且在别处用的非常正常。郁闷,找啊找
在网上找org.hibernate.hql.ast.QuerySyntaxException: unexpected token的错误有
1、持久类写错了,要不就是写成了数据库表名
2、hibernate3.0不支持select中嵌套查询,据说from中也不行,只支持where中嵌套查询,好像3.1支持了select中嵌套
3、sql语句中字段是用了保留关键字
然后就是我发现的这个隐蔽错误了
发现的from后的空格是一个全角的空格,半角 空格,全角 空格。距离比一样啊,原来就看出from后面的空格大了,还以为是两个空格呢。
隐蔽,太隐蔽了。
org.hibernate.hql.ast.QuerySyntaxException: unexpected token: ApplyInfo near line 1, column 23 [SELECT contCount FROM ApplyInfo where applyId = (select applyId from com.capinfo.hibernate.person.pojo.AContinueInfo where id=25)]
at org.hibernate.hql.ast.ErrorCounter.throwQueryException(ErrorCounter.java:59)
at org.hibernate.hql.ast.QueryTranslatorImpl.parse(QueryTranslatorImpl.java:244)
at org.hibernate.hql.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:155)
at org.hibernate.hql.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:109)
at org.hibernate.engine.query.HQLQueryPlan.<init>(HQLQueryPlan.java:75)
at org.hibernate.engine.query.HQLQueryPlan.<init>(HQLQueryPlan.java:54)
at org.hibernate.engine.query.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:71)
at org.hibernate.impl.AbstractSessionImpl.getHQLQueryPlan(AbstractSessionImpl.java:134)
at org.hibernate.impl.AbstractSessionImpl.createQuery(AbstractSessionImpl.java:113)
at org.hibernate.impl.SessionImpl.createQuery(SessionImpl.java:1602)
at com.capinfo.zgbm.print.dao.PrintQueryDAO.getContinueCount(PrintQueryDAO.java:273)
at com.capinfo.zgbm.print.action.PrintContinueCountAction.execute(PrintContinueCountAction.java:95)
at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:484)
at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:274)
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1482)
at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:525)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:763)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:856)
at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:225)
at weblogic.servlet.internal.StubSecurityHelper.invokeServlet(StubSecurityHelper.java:127)
at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:283)
at weblogic.servlet.internal.TailFilter.doFilter(TailFilter.java:26)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:42)
at com.capinfo.util.LoginFilter.doFilter(LoginFilter.java:61)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:42)
at com.capinfo.util.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:67)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:42)
at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:3212)
at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)
at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:121)
at weblogic.servlet.internal.WebAppServletContext.securedExecute(WebAppServletContext.java:1983)
at weblogic.servlet.internal.WebAppServletContext.execute(WebAppServletContext.java:1890)
at weblogic.servlet.internal.ServletRequestImpl.run(ServletRequestImpl.java:1344)
at weblogic.work.ExecuteThread.execute(ExecuteThread.java:209)
at weblogic.work.ExecuteThread.run(ExecuteThread.java:181)
Caused by: line 1:23: unexpected token: ApplyInfo
at org.hibernate.hql.antlr.HqlBaseParser.identPrimary(HqlBaseParser.java:4021)
at org.hibernate.hql.antlr.HqlBaseParser.primaryExpression(HqlBaseParser.java:861)
at org.hibernate.hql.antlr.HqlBaseParser.atom(HqlBaseParser.java:3422)
at org.hibernate.hql.antlr.HqlBaseParser.unaryExpression(HqlBaseParser.java:3200)
at org.hibernate.hql.antlr.HqlBaseParser.multiplyExpression(HqlBaseParser.java:3082)
at org.hibernate.hql.antlr.HqlBaseParser.additiveExpression(HqlBaseParser.java:2802)
at org.hibernate.hql.antlr.HqlBaseParser.concatenation(HqlBaseParser.java:570)
at org.hibernate.hql.antlr.HqlBaseParser.relationalExpression(HqlBaseParser.java:2586)
at org.hibernate.hql.antlr.HqlBaseParser.equalityExpression(HqlBaseParser.java:2449)
at org.hibernate.hql.antlr.HqlBaseParser.negatedExpression(HqlBaseParser.java:2413)
at org.hibernate.hql.antlr.HqlBaseParser.logicalAndExpression(HqlBaseParser.java:2331)
at org.hibernate.hql.antlr.HqlBaseParser.logicalOrExpression(HqlBaseParser.java:2296)
at org.hibernate.hql.antlr.HqlBaseParser.expression(HqlBaseParser.java:2082)
at org.hibernate.hql.antlr.HqlBaseParser.aliasedExpression(HqlBaseParser.java:2249)
at org.hibernate.hql.antlr.HqlBaseParser.selectedPropertiesList(HqlBaseParser.java:1455)
at org.hibernate.hql.antlr.HqlBaseParser.selectClause(HqlBaseParser.java:1365)
at org.hibernate.hql.antlr.HqlBaseParser.selectFrom(HqlBaseParser.java:1106)
at org.hibernate.hql.antlr.HqlBaseParser.queryRule(HqlBaseParser.java:702)
at org.hibernate.hql.antlr.HqlBaseParser.selectStatement(HqlBaseParser.java:296)
at org.hibernate.hql.antlr.HqlBaseParser.statement(HqlBaseParser.java:159)
at org.hibernate.hql.ast.QueryTranslatorImpl.parse(QueryTranslatorImpl.java:238)
... 33 more
2008年3月20日星期四
给页面加一层半透明div,禁用页面所有功能
想到屏蔽页面所有功能,思路是用户点击按钮,调用一个javascript方法,显示预先在页面中定义好的隐藏div,返回结果后再隐藏div,允许用户继续操作。
==========================================================
<html>
<head>
<title>半透明div</title>
<style>
.#mask {
visibility: hidden;
background-color: #cccccc;
left: 0px;
position: absolute;
top: 0px;
background-image: none;
filter: alpha(opacity : 50);
}
.#dialog {
visibility: hidden;
background-color: #f7fcfe;
z-index: 100;
width: 300px;
height: 50px;
position: absolute;
text-align: center;
font-size: 30px;
color: #FF0000;
font-weight: bold;
vertical-align: middle;
}
</style>
<script language="javaScript">
function show()
{
var d_mask=document.getElementById('mask');
var d_dialog = document.getElementById('dialog');
d_mask.style.width = document.body.clientWidth ;
d_mask.style.height=document.body.clientHeight;
//网页正文全文
//d_mask.style.width = document.body.scrollWidth ;
//d_mask.style.height=document.body.scrollHeight;
d_dialog.style.top = document.body.clientHeight / 2 - 60;
d_dialog.style.left =document.body.clientWidth / 2 -100;
d_mask.style.visibility='visible';
d_dialog.style.visibility='visible';
}
function divBlock_event_mousedown()
{
var e, obj, temp;
obj=document.getElementById('dialog');
e=window.event?window.event:e;
obj.startX=e.clientX-obj.offsetLeft;
obj.startY=e.clientY-obj.offsetTop;
document.onmousemove=document_event_mousemove;
temp=document.attachEvent?document.attachEvent('onmouseup',document_event_mouseup):document.addEventListener('mouseup',document_event_mouseup,'');
}
function document_event_mousemove(e)
{
var e, obj;
obj=document.getElementById('dialog');
e=window.event?window.event:e;
with(obj.style){
position='absolute';
left=e.clientX-obj.startX+'px';
top=e.clientY-obj.startY+'px';
}
}
function document_event_mouseup(e)
{
var temp;
document.onmousemove='';
temp=document.detachEvent?document.detachEvent('onmouseup',document_event_mouseup):document.removeEventListener('mouseup',document_event_mouseup,'');
}
window.onresize = function()
{
var d_mask=document.getElementById('mask');
var d_dialog = document.getElementById('dialog');
d_mask.style.width = document.body.clientWidth ;
d_mask.style.height=document.body.clientHeight;
}
</script>
</head>
<div id ="mask"></div>
<div id ="dialog" onmousedown="divBlock_event_mousedown()">处理中,请等待……</div>
<body>
<table border='0' width="100%" height="100%">
<tr>
<td>
测试
</td>
</tr>
<tr>
<td>
<input type="button" value="显示div" onclick="show()" />
</td>
</tr>
</table>
</body>
</html>
2008年3月13日星期四
2008年2月20日星期三
公司2008年全年放假安排
2008年,元旦、春节、清明节、国际劳动节、端午节、中秋节、国庆节放假调休日期具体安排如下:
一、元旦:2007年12月30日-2008年1月1日放假,共3天。其中:1月1日(星期二)为法定节假日,12月30日(星期日)为公休日,12月29日(星期六)公休日调至12月31日(星期一),12月29日(星期六)上班。
二、春节:2月6日—12日(即农历除夕至正月初六)放假,共7天。其中,2月6日(除夕)、2月7日(春节)、2月8日(正月初二)为法定节假日,2月9日(星期六)、2月10日(星期日)照常公休,将2月2日(星期六)、2月3日(星期日)两个公休日调至2月11日(星期一)、2月12日(星期二),2月2日(星期六)、2月3日(星期日)上班。
三、清明节:4月4日—6日放假,共3天。其中:4月4日(清明节),为法定节假日,4月5日(星期六)、4月6日(星期日)照常公休。
四、“五一”国际劳动节:5月1日—3日放假,共3天。其中,5月1日为法定节假日,5月3日(星期六)为公休日,5月4日(星期日)公休日调至5月2日(星期五),5月4日(星期日)上班。
五、端午节:6月7日—9日放假,共3天。其中:6月7日(星期六)照常公休,6月8日(农历五月初五,端午节)为法定节假日,6月8日(星期日)公休日调至6月9日(星期一)。
六、中秋节:9月13日—15日放假3天。其中,9月13日(星期六)为公休日;9月14日(农历八月十五,中秋节)为法定节假日,9月14日(星期日)公休日调至9月15日(星期一)。
七、国庆节:9月29日—10月5日放假7天。其中,10月1日、2日、3日,为法定节假日,9月27日(星期六)、9月28日(星期日)两个公休日调至9月29日(星期一)、30日(星期二),9月27日(星期六)、9月28日(星期日)上班,10月4日(星期六)、5日(星期日)照常公休。
2008年2月1日星期五
2008年1月23日星期三
妹的留言
秋 23:58:43
哥也许我把你气坏了, 我从来都是这样的,妈也说过我那么多回让我改,我敢说我来北京以后脾气根在家我改了很多,每次回家我是多多少少干了一点,也有没有干的时候,我也不想说什么我干了什么和没有干什么了,没有用,我一周就回来了一次,不是天天在家闲着,要是那样我没有做也行,在家的时候我要是不想做饭了根妈说让妈做妈没有说你怎么不做饭等着吃呢,她也知道我想玩会, 我就是有点不服气,也就这么点事,本来明天回家了高兴得很, 今天我把米饭做好了, 说让你回来买点菜回来就行了,从你把面包丢给我我也看出来了,我也生气你要不就别给我,你让我拿电脑回去,我不愿意拿一是我不想拿,而是我还怕丢了,爸爸那人你又不是不知道说话就那样,你呢还非得跟他较劲,你拿回去爸爸能怎么想,他能高兴,他主要是不懂得电脑就以为坏了,其实他说的也没有错,本来你买的就没有他这个好,要是买一样的你也不能和他换,所以他也就是发泄2下,找明白人给他弄好了也就没有事了,不知道你还老抓住这个不放什么,非给他拿回去,说到我过年回来我不回来了,老师说过你不能每周都回去,也得要锻炼着自己独立,周日多出去转转,我也想了不回来也行,也省得你说我礼貌不到,因为是在家里我跟本就没有注意到也没有上心里去,说到爸把我交给你是个极大的错误, 我也说了让你不用管了,我比谁都后悔来到着,我当初也说过我宁愿在家受累也不想来这,我知道上好的话能改变自己的一生,我知道妈他们挣钱是多么的不容易,我也不能让这2万块钱白交,不管学多少我学了,我尽力了, 这点我很清楚,我在着呢也让你跟着操心,我知道,因为你是我哥,我有什么不对的地方咱都是家里人没有什么,回家的时候我看你和嫂子在厨房也不说话,我以为你们生气了,平常看你们闹那肯定什么事也没有,从周六我回来到今天我看你也不怎么高兴,今天回来也没有说话,我没有进厨房,你们俩在厨房了谁也不吱声,我也就没有进去,说了这么多也没有说到什么重点,我呢脾气就是这样僵,生气的时候什么话都能够说出来,清醒了知道自己错了,不管怎么样你是我哥,我也拿你当哥,我也会慢慢改脾气的,一下子是不能改过来的,这一快过年了我们也都希望全家都高高兴兴的过年,都是一家人,没有什么大不了的,都是亲的没有什么深仇大恨,我希望今天这页就掀过去了,惹你生气了,我也知道自己错了,明天我就回家了希望让妈他们看到我高兴的回去再来,和你们处得也融洽,不让妈担心,希望你回去以后也能够跟爸和和睦睦的,我们全家都过了好年,今年家里多了嫂子也是喜事,我呢也不说了,希望你能把今天的事忘了吧,要是能原谅妹子这次呢,就发个信息给我吧。不原谅就当我什么也没有说好吧。
2008年1月21日星期一
当幸福来敲门
当幸福来敲门 威尔-斯密斯
晚上没事,重温了《当幸福来敲门》的下半部分(上半个不知道怎么没弄没了,呵呵)
I like it
也许应该找点东西感动感动,要不然被周围的冷漠淹没了
奋斗是根本,想想自己的境况比Chris好一点,还没有落魄的在卫生间过夜,多亏了父母的肩膀啊,可也有过半夜搬家的日子,我们还没有Chris努力,所以我们也会没有Chris成功
但是我们还想成功,还想住大房子,开小车,可那不是大风刮来的
当幸福来敲门 多美的一句话
2008年1月20日星期日
2008年1月17日星期四
javascript DWR 实现自定义加载信息
function useLoadingMessage(message) {
var loadingMessage;
if (message) loadingMessage = message;
else loadingMessage = "Loading";
DWREngine.setPreHook(function() {
var disabledZone = $('disabledZone');
if (!disabledZone) {
disabledZone = document.createElement('div');
disabledZone.setAttribute('id', 'disabledZone');
disabledZone.style.position = "absolute";
disabledZone.style.zIndex = "1000";
disabledZone.style.left = "0px";
disabledZone.style.top = "0px";
disabledZone.style.width = "100%";
disabledZone.style.height = "100%";
document.body.appendChild(disabledZone);
var messageZone = document.createElement('div');
messageZone.setAttribute('id', 'messageZone');
messageZone.style.position = "absolute";
messageZone.style.top = "400px"; //定义显示加载信息层的位置
messageZone.style.left = "400px"; //定义显示加载信息层的位置
messageZone.style.width = "150"; //定义显示加载信息层的宽度
messageZone.style.height = "30"; //定义显示加载信息层的高度
messageZone.style.background = "red";//定义显示加载信息层的颜色
messageZone.style.color = "white";
messageZone.style.fontFamily = "Arial,Helvetica,sans-serif";
messageZone.style.padding = "4px";
disabledZone.appendChild(messageZone);
var text = document.createTextNode(loadingMessage);
messageZone.appendChild(text);
}
else {
$('messageZone').innerHTML = loadingMessage;
disabledZone.style.visibility = 'visible';
}
});
DWREngine.setPostHook(function() {
$('disabledZone').style.visibility = 'hidden';
});
}
2008年1月16日星期三
聚合函数的查询
sql语句编写能力很差啊,总不用就忘啊,用了聚合函数的查询,得有group by
第一个行,第二个不行
SELECT
(select rowname from RPT_ROWCODE_SERVCORP rs where rs.rowcode = r.rowcode and tname = 'RPT_AGG_ST_SERV_01_2007') rowname,
r.rowcode,
sum(r.N01),sum(r.N02),sum(r.N03),sum(r.N04),sum(r.N05),sum(r.N06),sum(r.N07),
sum(r.N08),sum(r.N09),sum(r.N10),sum(r.N11),sum(r.N12),sum(r.N13),sum(r.N14),sum(r.N15)
FROM RPT_AGG_ST_SERV_01_2007 r
WHERE r.offino in ('0001') group by r.rowcode
order by r.rowcode
SELECT
rrs.rowcode,rrs.rowname,
sum(r.N01),sum(r.N02),sum(r.N03),sum(r.N04),sum(r.N05),sum(r.N06),sum(r.N07),
sum(r.N08),sum(r.N09),sum(r.N10),sum(r.N11),sum(r.N12),sum(r.N13),sum(r.N14),sum(r.N15)
FROM RPT_AGG_ST_SERV_01_2007 r,RPT_ROWCODE_SERVCORP rrs
WHERE rrs.rowcode = r.rowcode and rrs.tname = 'RPT_AGG_ST_SERV_01_2007' and r.offino in ('0001') group by r.rowcode
order by r.rowcode
avascript 删除中选中的选项
//javascript 删除<select>中选中的选项
function AddClick(field)
{
if(field.selectedIndex != -1)
{
for (var i=0; i < field.options.length; ++i)
{
if (field.options[i].selected)
{
field.options[i] = null;
--i
}
}
}
}
2008年1月12日星期六
javascript post提交并显示在弹出窗口
var previewWindow = window.open("","colReport","resizable=yes, scrollbars=1,status=1,toolbar=0,left=100, top=70");
document.forms[0].target= "colReport"; //previewWindow.name
document.forms[0].submit();
}
javascript 跨域访问 没有权限的问题
公司买的报表工具,为了节省成本,将报表服务单独部署了一个应用,我们的业务系统调用报表应用展现报表,开发还算顺利,现在到了用户试用了,问题来了
其中有个功能叫报表反查,页面中包含了四个fream,用户在其中三个fream中设置查询条件,当点击查询按钮,调用javascript得到每个fream中的参数,并将参数赋值到第四个fream中的form中的隐藏属性中,然后提交这个form(这时的form是在业务系统中的jsp)调用报表服务器的action,返回报表(此时的是报表应用返回的页面,不再是业务系统中的jsp了)。
这涉及到了两个应用,再次点击查询按钮,Ie就会报“没有权限”错误。
在网上搜,一个结论,浏览器不允许javaScript跨域访问,据说为了安全,那咋办,得用啊?!
搜啊搜,找到一个文章专门讨论这事儿的,作者提出了三种解决方案:
1、在涉及到跨域访问的页面中加入
<script language="JavaScript">
<!--
document.domain = "mycompany.com"; //指定 document 所属的域
-->
</script>
这样可以蒙混过浏览器,但是这种方法必须满足一个条件,就是两个应用必须属于同一个父域,也就是,比如,abc.def.com父域就该是def.com,如果document.domain = "域名";设置的不是其父域,就会报“参数无效”的错误。
而问题是我们的报表服务器和业务系统服务器不在一个父域下,这条路是行不通了
召集了公司几个同事讨论,最后得出两个方案,一是改为弹出窗口,而是写webservice
考虑到工作量,修改要小,选择了弹出窗口。
2、是IE独有了,就是弹出showmodaldialog,这种方法因为IE升级又行不通了。
3、就是通过服务器处理了。
总结,现在看来,解决这个问题就是1和3两种方案,第一种是在客户端处理,局限就是两个应用必须在同一个父域下,还有就是好像不是所有的浏览器支持设置domain。第二种就是通过服务器处理,这种方法好像势必要刷新整个窗口,像我这种情况,一个页面中有几个fream的情况,像保留用户设置的参数,还么有想到好的解决方法。
还想到一条路就是用ajax,这倒是实现了无刷新,但是我们的报表页面展现是一个自定义的jsp标签,还是要服务器展现,这条路没走下去。
2008年1月11日星期五
2008年1月9日星期三
javascript 文字闪烁
<head>
<script type="text/javascript">
function blinklink()
{
if (!document.getElementById('message').style.color)
{
document.getElementById('message').style.color="red"
}
if (document.getElementById('message').style.color=="red")
{
document.getElementById('message').style.color="black"
}
else
{
document.getElementById('message').style.color="red"
}
timer=setTimeout("blinklink()",100)
}
function stoptimer()
{
clearTimeout(timer)
}
</script>
</head>
<body onload="blinklink()" onunload="stoptimer()">
<div id="message" >Message</div>
<div id="new_task">Message</a>
<script language="JavaScript">
<!-- Begin
function initArray() {
for (var i = 0; i < initArray.arguments.length; i++) {
this[i] = initArray.arguments[i];
}
this.length = initArray.arguments.length;
}
var colors = new initArray(
"red",
"blue",
"green",
"purple",
"black",
"tan",
"red");
delay = .5; // seconds
link = 0;
vlink = 0;
function linkDance() {
link = (link+1)%colors.length;
vlink = (vlink+1)%colors.length;
new_task.style.color = colors[link];
setTimeout("linkDance()",delay*1000);
}
function linkDance1() {
link = (link+1)%colors.length;
vlink = (vlink+1)%colors.length;
new_task1.style.color = colors[link];
setTimeout("linkDance1()",delay*1000);
}
linkDance();
// End -->
</script>
</body>
</html>
javascript trim() 去掉前后空格
<!--
String.prototype.trim = function()
{
// 用正则表达式将前后空格
// 用空字符串替代。
return this.replace(/(^\s*)|(\s*$)/g, "");
}
buildTable.rows[1].cells[2].innerText.trim() == "已生成"
//-->
</script>