思考是進步的源泉
随笔- 6  文章- 1  评论- 5 
博客园  社区  首页  新随笔  联系  管理  订阅 订阅
2009年3月17日
40种网站设计常用技巧 (轉)

 

1. oncontextmenu="window.event.returnValue=false" 将彻底屏蔽鼠标右键
<table border oncontextmenu=return(false)><td>no</table> 可用于Table

2. <body onselectstart="return false"> 取消选取、防止复制

3. onpaste="return false" 不准粘贴

4. oncopy="return false;" oncut="return false;" 防止复制

5. <link rel="Shortcut Icon" href="favicon.ico"> IE地址栏前换成自己的图标

6. <link rel="Bookmark" href="favicon.ico"> 可以在收藏夹中显示出你的图标

7. <input style="ime-mode:disabled"> 关闭输入法

8. 永远都会带着框架
<script language="JavaScript"><!--
if (window == top)top.location.href = "frames.htm"; //frames.htm为框架网页
// --></script>

9. 防止被人frame
<SCRIPT LANGUAGE=JAVASCRIPT><!--
if (top.location != self.location)top.location=self.location;
// --></SCRIPT>

10. 网页将不能被另存为
<noscript><iframe src="/blog/*.html>";</iframe></noscript>

11. <input type=button value=查看网页源代码
onclick="window.location = "view-source:"+ "http://www.williamlong.info"">

12.删除时确认
<a href="javascript:if(confirm("确实要删除吗?"))location="boos.asp?&areyou=删除&page=1"">删除</a>

13. 取得控件的绝对位置
//Javascript
<script language="Javascript">
function getIE(e){
var t=e.offsetTop;
var l=e.offsetLeft;
while(e=e.offsetParent)
alert("top="+t+"/nleft="+l);
}
</script>

//VBScript
<script language="VBScript"><!--
function getIE()
dim t,l,a,b
set a=document.all.img1
t=document.all.img1.offsetTop
l=document.all.img1.offsetLeft
while a.tagName<>"BODY"
set a = a.offsetParent
t=t+a.offsetTop
l=l+a.offsetLeft
wend
msgbox "top="&t&chr(13)&"left="&l,64,"得到控件的位置"
end function
--></script>

14. 光标是停在文本框文字的最后
<script language="javascript">
function cc()
{
var e = event.srcElement;
var r =e.createTextRange();
r.moveStart("character",e.value.length);
r.collapse(true);
r.select();
}
</script>
<input type=text name=text1 value="123" onfocus="cc()">

15. 判断上一页的来源
javascript:
document.referrer



 
  shenglijay(探索者) ( ) 信誉:100    Blog  2006-12-20 16:45:02  得分: 0 


  
16. 最小化、最大化、关闭窗口
<object id=hh1 classid="clsid:ADB880A6-D8FF-11CF-9377-00AA003B7A11">
<param name="Command" value="Minimize"></object>
<object id=hh2 classid="clsid:ADB880A6-D8FF-11CF-9377-00AA003B7A11">
<param name="Command" value="Maximize"></object>
<OBJECT id=hh3 classid="clsid:adb880a6-d8ff-11cf-9377-00aa003b7a11">
<PARAM NAME="Command" VALUE="Close"></OBJECT>
<input type=button value=最小化 onclick=hh1.Click()>
<input type=button value=最大化 onclick=hh2.Click()>
<input type=button value=关闭 onclick=hh3.Click()>
本例适用于IE

17.屏蔽功能键Shift,Alt,Ctrl
<script>
function look(){
if(event.shiftKey)
alert("禁止按Shift键!"); //可以换成ALT CTRL
}
document.onkeydown=look;
</script>

18. 网页不会被缓存
<META HTTP-EQUIV="pragma" CONTENT="no-cache">
<META HTTP-EQUIV="Cache-Control" CONTENT="no-cache, must-revalidate">
<META HTTP-EQUIV="expires" CONTENT="Wed, 26 Feb 1997 08:21:57 GMT">
或者<META HTTP-EQUIV="expires" CONTENT="0">

19.怎样让表单没有凹凸感?
<input type=text style="border:1 solid #000000">
或
<input type=text style="border-left:none; border-right:none; border-top:none; border-bottom:

1 solid #000000"></textarea>

20.<div><span>&<layer>的区别?
<div>(division)用来定义大段的页面元素,会产生转行
<span>用来定义同一行内的元素,跟<div>的唯一区别是不产生转行
<layer>是ns的标记,ie不支持,相当于<div>

21.让弹出窗口总是在最上面:
<body onblur="this.focus();">

22.不要滚动条?
让竖条没有:
<body style="overflow:scroll;overflow-y:hidden">
</body>
让横条没有:
<body style="overflow:scroll;overflow-x:hidden">
</body>
两个都去掉?更简单了
<body scroll="no">
</body>

23.怎样去掉图片链接点击后,图片周围的虚线?
<a href="#" onFocus="this.blur()"><img src="/blog/logo.jpg" border=0></a>

24.电子邮件处理提交表单
<form name="form1" method="post" action="mailto:****@***.com" enctype="text/plain">
<input type=submit>
</form>

25.在打开的子窗口刷新父窗口的代码里如何写?
window.opener.location.reload()

26.如何设定打开页面的大小
<body onload="top.resizeTo(300,200);">
打开页面的位置<body onload="top.moveBy(300,200);">

27.在页面中如何加入不是满铺的背景图片,拉动页面时背景图不动
<STYLE>
body
{background-image:url(/blog/logo.gif); background-repeat:no-repeat;
background-position:center;background-attachment: fixed}
</STYLE>

28. 检查一段字符串是否全由数字组成
<script language="Javascript"><!--
function checkNum(str){return str.match(//D/)==null}
alert(checkNum("1232142141"))
alert(checkNum("123214214a1"))
// --></script>

29. 获得一个窗口的大小
document.body.clientWidth; document.body.clientHeight

30. 怎么判断是否是字符
if (/[^/x00-/xff]/g.test(s)) alert("含有汉字");
else alert("全是字符");

31.TEXTAREA自适应文字行数的多少
<textarea rows=1 name=s1 cols=27 onpropertychange="this.style.posHeight=this.scrollHeight">
</textarea>

32. 日期减去天数等于第二个日期
<script language=Javascript>
function cc(dd,dadd)
{
//可以加上错误处理
var a = new Date(dd)
a = a.valueOf()
a = a - dadd * 24 * 60 * 60 * 1000
a = new Date(a)
alert(a.getFullYear() + "年" + (a.getMonth() + 1) + "月" + a.getDate() + "日")
}
cc("12/23/2002",2)
</script>

33. 选择了哪一个Radio
<HTML><script language="vbscript">
function checkme()
for each ob in radio1
if ob.checked then window.alert ob.value
next
end function
</script><BODY>
<INPUT name="radio1" type="radio" value="style" checked>Style
<INPUT name="radio1" type="radio" value="barcode">Barcode
<INPUT type="button" value="check" onclick="checkme()">
</BODY></HTML>

34.脚本永不出错
<SCRIPT LANGUAGE="JavaScript">
<!-- Hide
function killErrors() {
return true;
}
window.onerror = killErrors;
// -->
</SCRIPT>

35.ENTER键可以让光标移到下一个输入框
<input onkeydown="if(event.keyCode==13)event.keyCode=9">



 

Top 
shenglijay(探索者) ( ) 信誉:100    Blog  2006-12-20 16:45:14  得分: 0 


  
36. 检测某个网站的链接速度:
把如下代码加入<body>区域中:
<script language=Javascript>
tim=1
setInterval("tim++",100)
b=1
var autourl=new Array()
autourl[1]="www.njcatv.net"
autourl[2]="javacool.3322.net"
autourl[3]="www.sina.com.cn"
autourl[4]="www.nuaa.edu.cn"
autourl[5]="www.cctv.com"
function butt(){
document.write("<form name=autof>")
for(var i=1;i<autourl.length;i++)
document.write("<input type=text name=txt"+i+" size=10 value="/blog/测试中......>" =》<input type=text
name=url"+i+" size=40> =》<input type=button value=GO

onclick=window.open(this.form.url"+i+".value)><br/>")
document.write("<input type=submit value=刷新></form>")
}
butt()
function auto(url)
else

b++
}
function run(){for(var i=1;i<autourl.length;i++)document.write("<img src=http://"+autourl+"/"+Math.random()+" width=1 height=1

onerror=auto("http://"+autourl+"")>")}
run()</script>

37. 各种样式的光标
auto :标准光标
default :标准箭头
hand :手形光标
wait :等待光标
text :I形光标
vertical-text :水平I形光标
no-drop :不可拖动光标
not-allowed :无效光标
help :?帮助光标
all-scroll :三角方向标
move :移动标
crosshair :十字标
e-resize
n-resize
nw-resize
w-resize
s-resize
se-resize
sw-resize

38.页面进入和退出的特效
进入页面<meta http-equiv="Page-Enter" content="revealTrans(duration=x, transition=y)">
推出页面<meta http-equiv="Page-Exit" content="revealTrans(duration=x, transition=y)"> 
这个是页面被载入和调出时的一些特效。duration表示特效的持续时间,以秒为单位。transition表示使用哪种特效,取值为1-23:
  0 矩形缩小
  1 矩形扩大
  2 圆形缩小
  3 圆形扩大
  4 下到上刷新
  5 上到下刷新
  6 左到右刷新
  7 右到左刷新
  8 竖百叶窗
  9 横百叶窗
  10 错位横百叶窗
  11 错位竖百叶窗
  12 点扩散
  13 左右到中间刷新
  14 中间到左右刷新
  15 中间到上下
  16 上下到中间
  17 右下到左上
  18 右上到左下
  19 左上到右下
  20 左下到右上
  21 横条
  22 竖条
  23 以上22种随机选择一种

39.在规定时间内跳转
<META http-equiv=V="REFRESH" content="5;URL=http://www.williamlong.info">

40.网页是否被检索
<meta name="ROBOTS" content="属性值">
  其中属性值有以下一些:
  属性值为"all": 文件将被检索,且页上链接可被查询;
  属性值为"none": 文件不被检索,而且不查询页上的链接;
  属性值为"index": 文件将被检索;
  属性值为"follow": 查询页上的链接;
  属性值为"noindex": 文件不检索,但可被查询链接;
  属性值为"nofollow": 文件不被检索,但可查询页上的链接。

最大化窗口?
<script language="JavaScript">
<!--
self.moveTo(0,0)
self.resizeTo(screen.availWidth,screen.availHeight)
//-->
</script>




解决问题:由于层与下拉框之间的优先级是:下拉框 > 层,因此在显示的时候,会因为优先级的次序而会出现如上问题。(如果几个元素都是层的话,我们可以通过层的 z-index 属性来设置)解决办法就是:给层中放一个优先级比下拉框更高的元素(iframe),从而解决此问题!具体解决代码如下:

<div id="menu" style="position:absolute; visibility:hidden; top:20px; left:20px; width:100px; height:200px; background-color:#6699cc;">
<table>
  <tr><td>item 1</td></tr>
  <tr><td>item 2</td></tr>
  <tr><td>item 3</td></tr>
  <tr><td>item 4</td></tr>
  <tr><td>item 5</td></tr>
  </table>
  <iframe src="/blog/javascript:false" style="position:absolute; visibility:inherit; top:0px; left:0px; width:100px; height:200px; z-index:-1; filter='progid:DXImageTransform.Microsoft.Alpha(style=0,opacity=0)';"></iframe>
</div>

<a href="#" onclick="document.getElementById('menu').style.visibility='visible'">menu</a>

<form>
  <select><option>A form selection list</option></select>
</form>

输入框也可以做的很漂亮了
<div align="center"><input type="hidden" name="hao" value="yes">
              外向数:<input
      name=answer
      style="color: rgb(255,0,0); border-left: medium none; border-right: medium none; border-top: medium none; border-bottom: 1px solid rgb(192,192,192)">
             没回答的题数:<input
      name=unanswer id="unanswer"
      style="color: rgb(255,0,0); border-left: medium none; border-right: medium none; border-top: medium none; border-bottom: 1px solid rgb(192,192,192)">
            <br/>
            总得分:
            <input
      name=score id="score"
      style="color: rgb(255,0,0); border-left: medium none; border-right: medium none; border-top: medium none; border-bottom: 1px solid rgb(192,192,192)">
             结    论:
            <input
      name=xgjg id="xgjg"
      style="color: rgb(255,0,0); border-left: medium none; border-right: medium none; border-top: medium none; border-bottom: 1px solid rgb(192,192,192)">
            <br/>
            <br/>
           
            <input onClick=processForm(this.form) style="FONT-FAMILY: 宋体; FONT-SIZE: 9pt" type=button value=查看结果 name="button">
             <input type="reset" name="Submit" value="重做">
            </div>
注意:修改<body>为<body onload="max.Click()">即为打开最大

化窗口,而如果改为<body onload="min.Click()">就变为窗口一打开就最小化

<object id="min" type="application/x-oleobject" classid="clsid:adb880a6-d8ff-11cf-9377-00aa003b7a11">
            <param name="Command" value="Minimize">
          </object> <object id="max" type="application/x-oleobject" classid="clsid:adb880a6-d8ff-11cf-9377-00aa003b7a11">
            <param name="Command" value="Maximize">
          </object>
</body>

页面自动刷新(说明)

当你做网页时,是不是有的时候想让你的网页自动不停刷新,或者过一段时间自动跳转到另外一个你自己设定的页面?其实实现这个效果非常地简单,而且这个效果甚至不能称之为特效。你只要把如下代码加入你的网页中就可以了。

1,页面自动刷新:把如下代码加入<head>区域中<meta http-equiv="refresh" content="20">,其中20指每隔20秒刷新一次页面.

2,页面自动跳转:把如下代码加入<head>区域中<meta http-equiv="refresh" content="20;url=http://www.williamlong.info">,其中20指隔20秒后跳转到http://www.williamlong.info页面。

页面自动关闭

5000是指时间<body onLoad="setTimeout(window.close, 5000)">

弹出窗口自动关闭

10秒后弹出窗口自动关闭

注意:在新的tan.htm的body中要加 <onLoad="closeit()">
head

<script language="JavaScript">

<!--

var gt = unescape('%3e');

var popup = null;

var over = "Launch Pop-up Navigator";

popup = window.open('', 'popupnav', 'width=225,height=235,resizable=1,scrollbars=auto');

if (popup != null) {

if (popup.opener == null) {

popup.opener = self;

}

popup.location.href = 'tan.htm';

}

// -->

</script>
<body>注意:这段代码是在新建文件中的
<script language="JavaScript">

function closeit()

</script>

这个可不是<iframe>(引用)呀。是直接调用的。以下代码加入<body>区域

<object type="text/x-scriptlet" width="800"  height="1000" data="../index.htm">
</object>
posted @ 2009-03-17 12:29 装不满的瓶子 阅读(180) 评论(0) 编辑
2009年2月19日
写给设计人的10个jQuery特效
标签: design, jQuery, 教程
Reading

jQuery已经不是什么新鲜的事儿,记得第一次听说是在catch the digital flow上。总把它认为是非常难的东西,也就没有认真去了解他了。直到学完CSS的大部分内容,才开始接触这种"write less, do more" 的Javascrīpt框架。今天,这篇文章的最重要内容是来自Web Designer Wall的一篇教程,一篇包含了10个jQuery特效的教程。这里不打算全文翻译,想以自己的语言来表达,或许这样更方便大家理解/自己以后学习,也可能更准确地描述。

提示:教程中所用的 jQuery 版本为1.2.3。这篇文章是为jQuery新手而写的。

先试试看? View jQuery Demos | Download Demo ZIP

jQuery是如何工作的?

首先,你需要下载一个jQuery版本,并将它插入到<head>标签内。然后,你将需要写函数来告诉jQuery做些什么,下面的这个图表将告诉你jQuery是怎样工作的(点击图片,查看大图):

jquery-how-it-works !

如何获取元素(Get the element)?

书写 jQuery 函数是一个非常简单的事(多亏了精彩的说明书)。关键是你要学习如何获取你想要实现的效果的确切元素。

  • $("#header") = 获取 id="header" 的元素
  • $("h3") = 获取所有<h3>
  • $("div#content .photo") = 获取<div id="content">里所有用class="photo"定义的元素
  • $("ul li") = 获取所以 <ul> 中 <li> 的元素
  • $("ul li:first") = 只获取<ul>中第一个<li>

1. 简单的下拉面板

让我们来开始这个简单的下拉面板特效吧(view demo),或许你已经见过很多次,现在,自己试试吧:

sample1

当包含class="btn-slide"的元素被点击,它会下拉/上提<div id="panel">里的元素。然后切换到CSS中的class="active"到<a class="btn-slide">元素。.active 将会以CSS的方式打开/关闭出面板。

$(document).ready(function(){
$(".btn-slide").click(function(){	  $("#panel").slideToggle("slow");	  $(this).toggleClass("active");	});
});

2. 简单的隐藏效果

如图,当右上角的上图标被点击时,内容被隐藏。效果可以看Demo (view demo)

sample2

当被定义为 <img class="delete"> 的图片被点击,它会手找到父级元素 <div class="pane"> 并激活它的能力,慢慢消失,隐藏起来。

$(document).ready(function(){
$(".pane .delete").click(function(){	  $(this).parents(".pane").animate({ opacity: "hide" }, "slow");	});
});

3 连续过渡效果

让我们来看看jQuery连贯性的威力吧。只需要几行代码,我能让这个方块渐变+缩放比例地飞来飞去(view demo)

multi-animation

Line 1: 当 <a class="run"> 被点击
Line 2: 激活 <div id="box"> 的不透明度(opacity)=0.1,直到值达到400px,速度达到1200px/ms
Line 3: 当opacity=0.4, top=160px,height=20,width=20,以"slow"显示
Line 4: 当opacity=1, left=0, height=100, width=100,也以"slow"显示
Line 5: 当opacity=1, left=0, height=100, width=100, 也以"slow"显示
Line 6: 当top=0, 以"fast"显示
Line 7: 然后,以常速上滑 (default speed = "normal")
Line 8: 然后以"slow"下滑
Line 9:返回失效会阻止浏览器跳向链接锚点

$(document).ready(function(){
$(".run").click(function(){
$("#box").animate({opacity: "0.1", left: "+=400"}, 1200)	  .animate({opacity: "0.4", top: "+=160", height: "20", width: "20"}, "slow")	  .animate({opacity: "1", left: "0", height: "100", width: "100"}, "slow")	  .animate({top: "0"}, "fast")	  .slideUp()	  .slideDown("slow")	  return false;
});
});

4a. 可折叠的模式 #1

这是第一个可折叠的样式, (view demo)

sample3

第一行将向<div class="accordion"> 内的第一个<H3> 添加一个CSS class为"active"的值。 第二行刚是隐藏<div class="accordion">内非第一个< p >的内容。

当 <h3> 被点击时,当前<p>下拉,而原先下拉的<p> 上提。

$(document).ready(function(){
$(".accordion h3:first").addClass("active");	$(".accordion p:not(:first)").hide();
$(".accordion h3").click(function(){
$(this).next("p").slideToggle("slow")	  .siblings("p:visible").slideUp("slow");	  $(this).toggleClass("active");	  $(this).siblings("h3").removeClass("active");
});
});

4b. 可折叠模式 #2

这个实例与#1非常类似,不过,它会让指定的面板像默认面板一样打开(view demo)

在CSS样式表中,设置.accordion p 为 display:none。现在,如果你像默认打开的样式一样,打开第三个面板,你可以写$(".accordion2 p").eq(2).show(); (eq = equal)来实现它,需要注意的是起始点是"0",而不是"1",所以,第三个相应的是"2",而不是"3"。

$(document).ready(function(){
$(".accordion2 h3").eq(2).addClass("active");	$(".accordion2 p").eq(2).show();
$(".accordion2 h3").click(function(){	  $(this).next("p").slideToggle("slow")	  .siblings("p:visible").slideUp("slow");	  $(this).toggleClass("active");	  $(this).siblings("h3").removeClass("active");	});
});

5a. 鼠标经过激活效果 #1

这个将会实现一个非常漂亮的,当鼠标经过时出现渐变出现的效果 (view demo)

sample4

当鼠标经过菜单时,它会寻找紧接着的<em>,并在上方激活它的不透明度。

$(document).ready(function(){
$(".menu a").hover(function() {	  $(this).next("em").animate({opacity: "show", top: "-75"}, "slow");	}, function() {	  $(this).next("em").animate({opacity: "hide", top: "-85"}, "fast");	});
});

5b. 鼠标经过激活 #2

这个实例会显示菜单中链接的title 属性attribute,让其以变数方式存在,并添加<em>标签 (view demo)

sample4b

第一行会添加一个空的<em>到菜单的<a>元素。

当鼠标经过菜单链接时,它会显示title的属性,让它以"hoverText(隐藏)"的形式显示,并使<em>中的文字显示隐藏文本的值。

$(document).ready(function(){
$(".menu2 a").append("<em></em>");
$(".menu2 a").hover(function() {	  $(this).find("em").animate({opacity: "show", top: "-75"}, "slow");	  var hoverText = $(this).attr("title");	  $(this).find("em").text(hoverText);	}, function() {	  $(this).find("em").animate({opacity: "hide", top: "-85"}, "fast");	});
});

6. 整块可点击性效果

这个实例将会教你如何实现内容中元素可点击性效果,Best Web Gallery的侧边栏Tab就显示这样的效果 (view demo)

sample5

如果你想让class="pane-list"的<ul>内的 <li> 可点击(整块),你可以向 ".pane-list li"指派一个函数,使它被点击时,函数找到 <a>元素,重定向到它的href属性值。

$(document).ready(function(){
$(".pane-list li").click(function(){	  window.location=$(this).find("a").attr("href"); return false;	});
});

7. 可收缩面板

让我们组合一下上面的实例,创造一给可收缩的面板(像Gmai收件箱面板l)。作者还在Web Designer Wall 的评论列表Next2Friends里应用这个(view demo)

sample6

First line: 隐藏<div class="message_body">里第一个元素以后的元素
Second line: 隐藏所有第5个<li>后面的元素
Third part: 当<p class="message_head">被点击里,显示/隐藏<div class="message_body">
Fourth part: 当<a class="collpase_all_message"> 被点击时,上提所有<div class="message_body">的元素
Fifth part: 当<a class="show_all_message"> 被点击,隐藏它,并显示<a class="show_recent_only">,并下拉第5个<li>以后的元素
Sixth part: 当<a class="show_recent_only"> 被点击时,隐藏它,并显示<a class="show_all_message">,并上提第5个 <li>以后的元素

$(document).ready(function(){
//hide message_body after the first one	$(".message_list .message_body:gt(0)").hide();
//hide message li after the 5th	$(".message_list li:gt(4)").hide();
//toggle message_body	$(".message_head").click(function(){	  $(this).next(".message_body").slideToggle(500)	  return false;	});
//collapse all messages	$(".collpase_all_message").click(function(){	  $(".message_body").slideUp(500)	  return false;	});
//show all messages	$(".show_all_message").click(function(){	  $(this).hide()	  $(".show_recent_only").show()	  $(".message_list li:gt(4)").slideDown()	  return false;	});
//show recent messages only	$(".show_recent_only").click(function(){	  $(this).hide()	  $(".show_all_message").show()	  $(".message_list li:gt(4)").slideUp()	  return false;	});
});

8. 模仿WordPress后台评论管理面板

我想你可能见过最多次这个效果是在Wordpress后台的评论管理面板。那好,让我们来用jQuery来模仿它的效果。为了实现背景颜色,你需要包含Color Animations这个插件(view demo)

sample

First line: 向<div class="pane"> 添加 "alt" class
Second part: 当<a class="btn-delete">被点击,激活<div class="pane">的不透明度
Third part: 当<a class="btn-unapprove">被点击, 首先让<div class="pane">显示黄色,然后变为白色,并添加类(addClass)"spam"
Fourth part: 当<a class="btn-approve">被点击,首先让<div class="pane">显示绿色,然后变为白色,并移除类(removeClass)"spam"
Fifth part: 当<a class="btn-spam">被点击,激活背景色为red并使其opacity ="hide"

 

//don't forget to include the Color Animations plugin//<script type="text/javascript" src="jquery.color.js"></script>
$(document).ready(function(){
$(".pane:even").addClass("alt");
$(".pane .btn-delete").click(function(){	  alert("This comment will be deleted!");
$(this).parents(".pane").animate({ backgroundColor: "#fbc7c7" }, "fast")	  .animate({ opacity: "hide" }, "slow")	  return false;	});
$(".pane .btn-unapprove").click(function(){	  $(this).parents(".pane").animate({ backgroundColor: "#fff568" }, "fast")	  .animate({ backgroundColor: "#ffffff" }, "slow")	  .addClass("spam")	  return false;	});
$(".pane .btn-approve").click(function(){	  $(this).parents(".pane").animate({ backgroundColor: "#dafda5" }, "fast")	  .animate({ backgroundColor: "#ffffff" }, "slow")	  .removeClass("spam")	  return false;	});
$(".pane .btn-spam").click(function(){	  $(this).parents(".pane").animate({ backgroundColor: "#fbc7c7" }, "fast")	  .animate({ opacity: "hide" }, "slow")	  return false;	});
});

 

9. 轮换图片展栏

如果你有一个项目需要显示多个图片,并且你不希望链向另一个页面,那么你可以在当前面加载目标链接的JPG(view demo)

sample8

首先,添加一个<em>到H2标签。

当<p class=thumbs>内的元素被点击:
- 以可视的形式显示href属性的"largePath"路径
- 以可视的形式显示title 属性的"largeAlt"
- 代换<img id="largeImg">的scr属性内可视的"largePath"路径,并代换alt属性内可视的"largeAlt"
- 设置em内的内容(h2内) 为可视的largeAlt

$(document).ready(function(){
$("h2").append('<em></em>')
$(".thumbs a").click(function(){
var largePath = $(this).attr("href");	  var largeAlt = $(this).attr("title");
$("#largeImg").attr({ src: largePath, alt: largeAlt });
$("h2 em").html(" (" + largeAlt + ")"); return false;	});
});

10. 个性化不同的链接样式

在现代化的浏览器中,个性化不同的链接是非常容易的事,比如想让.pdf文件显示特殊的样式,你只需要添加上简单的CSS规则:a[href $='.pdf'] { … }就可以实现,但不幸的是IE6并不支持这个。如果想实现这个,你可以利用jQuery (view demo)

sample9

前三行代码必需是连续的,它只是一个<a>的href属性中的一个CSS class。

第二部分将会获取所有href中没有"http://www.webdesignerwall.com" 和/或没有"#"的< a>元素,并添加"external" class和target= "_blank"。

$(document).ready(function(){
$("a[@href$=pdf]").addClass("pdf");
$("a[@href$=zip]").addClass("zip");
$("a[@href$=psd]").addClass("psd");
$("a:not([@href*=http://www.webdesignerwall.com])").not("[href^=#]")	  .addClass("external")	  .attr({ target: "_blank" });
});
posted @ 2009-02-19 14:14 装不满的瓶子 阅读(1016) 评论(0) 编辑
[转][学习]asp.net日期格式

[转][学习]asp.net日期格式

DateTime dt = DateTime.Now;

dt.ToString();//2005-11-5 13:21:25
dt.ToFileTime().ToString();//127756416859912816
dt.ToFileTimeUtc().ToString();//127756704859912816
dt.ToLocalTime().ToString();//2005-11-5 21:21:25
dt.ToLongDateString().ToString();//2005年11月5日
dt.ToLongTimeString().ToString();//13:21:25
dt.ToOADate().ToString();//38661.5565508218
dt.ToShortDateString().ToString();//2005-11-5
dt.ToShortTimeString().ToString();//13:21
dt.ToUniversalTime().ToString();//2005-11-5 5:21:25
dt.Year.ToString();//2005
dt.Date.ToString();//2005-11-5 0:00:00
dt.DayOfWeek.ToString();//Saturday
dt.DayOfYear.ToString();//309
dt.Hour.ToString();//13
dt.Millisecond.ToString();//441
dt.Minute.ToString();//30
dt.Month.ToString();//11
dt.Second.ToString();//28
dt.Ticks.ToString();//632667942284412864
dt.TimeOfDay.ToString();//13:30:28.4412864
dt.ToString();//2005-11-5 13:47:04
dt.AddYears(1).ToString();//2006-11-5 13:47:04
dt.AddDays(1.1).ToString();//2005-11-6 16:11:04
dt.AddHours(1.1).ToString();//2005-11-5 14:53:04
dt.AddMilliseconds(1.1).ToString();//2005-11-5 13:47:04
dt.AddMonths(1).ToString();//2005-12-5 13:47:04
dt.AddSeconds(1.1).ToString();//2005-11-5 13:47:05
dt.AddMinutes(1.1).ToString();//2005-11-5 13:48:10
dt.AddTicks(1000).ToString();//2005-11-5 13:47:04
dt.CompareTo(dt).ToString();//0
dt.Add(?).ToString();//问号为一个时间段
dt.Equals("2005-11-6 16:11:04").ToString();//False
dt.Equals(dt).ToString();//True
dt.GetHashCode().ToString();//1474088234
dt.GetType().ToString();//System.DateTime
dt.GetTypeCode().ToString();//DateTime
  
dt.GetDateTimeFormats('s')[0].ToString();//2005-11-05T14:06:25
dt.GetDateTimeFormats('t')[0].ToString();//14:06
dt.GetDateTimeFormats('y')[0].ToString();//2005年11月
dt.GetDateTimeFormats('D')[0].ToString();//2005年11月5日
dt.GetDateTimeFormats('D')[1].ToString();//2005 11 05
dt.GetDateTimeFormats('D')[2].ToString();//星期六 2005 11 05
dt.GetDateTimeFormats('D')[3].ToString();//星期六 2005年11月5日
dt.GetDateTimeFormats('M')[0].ToString();//11月5日
dt.GetDateTimeFormats('f')[0].ToString();//2005年11月5日 14:06
dt.GetDateTimeFormats('g')[0].ToString();//2005-11-5 14:06
dt.GetDateTimeFormats('r')[0].ToString();//Sat, 05 Nov 2005 14:06:25 GMT

string.Format("{0:d}",dt);//2005-11-5
string.Format("{0:D}",dt);//2005年11月5日
string.Format("{0:f}",dt);//2005年11月5日 14:23
string.Format("{0:F}",dt);//2005年11月5日 14:23:23
string.Format("{0:g}",dt);//2005-11-5 14:23
string.Format("{0:G}",dt);//2005-11-5 14:23:23
string.Format("{0:M}",dt);//11月5日
string.Format("{0:R}",dt);//Sat, 05 Nov 2005 14:23:23 GMT
string.Format("{0:s}",dt);//2005-11-05T14:23:23
string.Format("{0:t}",dt);//14:23
string.Format("{0:T}",dt);//14:23:23
string.Format("{0:u}",dt);//2005-11-05 14:23:23Z
string.Format("{0:U}",dt);//2005年11月5日 6:23:23
string.Format("{0:Y}",dt);//2005年11月
string.Format("{0}",dt);//2005-11-5 14:23:23
string.Format("{0:yyyyMMddHHmmssffff}",dt);


计算2个日期之间的天数差
-----------------------------------------------
DateTime dt1 = Convert.DateTime("2007-8-1");   
DateTime dt2 = Convert.DateTime("2007-8-15");  
TimeSpan span = dt2.Subtract(dt1);             
int dayDiff = span.Days + 1;                   

计算某年某月的天数
-----------------------------------------------   
int days = DateTime.DaysInMonth(2007, 8);      
days = 31;                                     

给日期增加一天、减少一天
-----------------------------------------------
DateTime dt =DateTime.Now;
dt.AddDays(1); //增加一天
dt.AddDays(-1);//减少一天
其它年份方法类似...

Oracle SQL里转换日期函数
-----------------------------------------------
to_date("2007-6-6",'YYYY-MM-DD");
to_date("2007/6/6",'yyyy/mm/dd");


如下一组数据,如何查找表里包含9月份的记录:
CGGC_STRATDATE CGGC_ENDDATE
=========================================
2007-8-4 2007-9-5
2007-9-5 2007-9-20
2007-9-22 2007-10-5

SELECT * FROM TABLE
(TO_DATE('2007/9/1','yyyy/mm/dd') BETWEEN CGGC_STRATDATE
AND CGGC_ENDDATE OR CGGC_STRATDATE >=TO_DATE('2007/9/1','yyyy/mm/dd')
AND CGGC_ENDDATE<=TO_DATE('2007/9/30','yyyy/mm/dd') "
OR TO_DATE('2007/9/30','yyyy/mm/dd') BETWEEN CGGC_STRATDATE
AND CGGC_ENDDATE) ORDER BY CGGC_STRATDATE ASC

posted @ 2009-02-19 14:13 装不满的瓶子 阅读(686) 评论(0) 编辑
2009年2月17日
使用母版頁是內容如何使用CSS和javascript(轉)

使用母版页时内容页如何使用css和javascript(转)

 

由于网站的主要频道页和列表页的头部和底部都是一样的,如果将每个页面放在单独的页面中,当头部和底部需要更改时维护量太大。于是想把头部和底部做成母版页,频道页和列表页的具体内容放到内容页中。这样当头和底需要改动时,只要修改一下母版页就可以了。

好处有了,问题也接着来了。原来在频道页和列表页中有其各自的css引入和一些javascript函数,当使用母版页时,放在内容页中这些css样式和javascript函数怎么处理呢?因为大家知道,使用母版页的内容页是不能包含<head></head>标记的,而css和javascript函数的声明是要放到<head></head>中间的,这些css样式和javascript函数如何处理呢?上网查了一下,大致有三种解决方案:方案一:把所有的css样式和javascript函数放到母版页的<head></head>中,我觉得这样做的弊端就是导致母版页的<head></head>区特别臃肿,同时如果原来两个频道页中包含同名的css声明或javascript函数,但却是不同样式或执行不同操作,怎么办呢?所以这第一种方案很快被我否定了。方案二是在内容页的PageLoad事件中通过代码来指定本内容页的css文件。具体代码如下:

static public class ControlHelper
{
    
static public void AddStyleSheet(Page page, string cssPath)
     {
         HtmlLink link
= new HtmlLink();
         link.Href
= cssPath;
         link.Attributes[
"rel"] = "stylesheet";
         link.Attributes[
"type"] = "text/css";
         page.Header.Controls.Add(link);
     }
}

这样,在具体页面,我们就可以通过如下代码添加 CSS 引用:

protected void Page_Load(object sender, EventArgs e)
{
     ControlHelper.AddStyleSheet(
this.Page, "css/projectPage.css");    
}

这种解决方案的好处时可以在程序运行时动态更改所需的css文件,但是对javascript函数处理起来该怎么做呢?再说有必要把本该加在html代码中的css和javascript通过cs代码来加入吗?因此,这种解决方案也很快被我否定了。剩下的第三种解决方案就是在母版页的<head></head>中添加一个内容控件,然后在内容页中在对应的内容控件中写css和javascript代码。听起来这个这个解决方案应该是最方便,最适宜的解决方法。可是当我把ContentPlaceHolder控件拖放到<head></head中间时,vs2005却报了下面的错误:

白天的时候,看到这我就以为这种方法行不通了,差点就放弃了。晚上回家想找找更好的解决方案,可所有的文章基本上都是说的前两种,对第三种解决方案有人说报错,不行。看来碰到这个提示后放弃的人还真不少。我没理这个错误,直接转到内容页,,在内容页中插入以下代码:

看了一下,内容页中没有报错,看来有戏。可转到内容页的设计视图一看,出现了如下界面:

心凉了一下,因为没看到我上面应用的css样式的效果,我的css文件的代码如下:
#content
{
     text-align:center;
     width:200px;
     height:100px;
     background-color:#00FF00;
     color:#FF0000;
     font-size:12px;
}
也就是让id为content的div宽度200px,高度100px,文字居中,背景颜色为为绿色,字体为红色,12px。不甘心的我按下了F5调试键,令人惊喜的一个画面出现了:
这说明css应用成功了,同时也看到了那个测试可爱的hello world对话框alert了出来。成功了!
总结一下,其实很多人开始的想法和我一样,想如何用最简单的方法实现在内容页中使用css和javascript的功能。他们中的很多人可能也找到我找到的那篇文章,但是当碰到我的那个母版页中的错误提示后就放弃了,也许有人坚持到了第二步,可是在设计视图中没看到css的应用效果后可能也放弃了。其实只要在坚持一下就成功了!余世维说的好“比别人多想一点,你就能成功!”,确实很有道理啊。
posted @ 2009-02-17 10:52 装不满的瓶子 阅读(726) 评论(1) 编辑
2009年2月11日
转载--苹果是怎么吃到的?——职业规划,从了解自己开始
文 / 周爱民(2008年3月刊)

克里希拉穆提有一本著作,名为《重新认识你自己》,我每每读起,都汗如雨下。克氏的每一句话,每一个发问都直刺人的内心,其目如炬如电。克氏的作品大多如此:不停地陈述、不停地发问。

引子

……路人甲抬头的时候,看见一棵巨大的苹果树,他想,我如果能吃一个苹果就好了……

面临需求

你感到饥饿了?正如你明天将面对面试官,而现在,你只是在面对一个苹果,亦或者一树苹果。你不能明确你想要哪一个苹果,也或者所有苹果都与你无关——你不曾亲近于他们,他们离你如此之远,你上蹿下跳,却仍然够不到最近的一根枝杈。

你所有的问题只起源于“想吃一个苹果”,然而你面临的,却是够到那根树枝。枝杈与苹果之间有什么关系呢?你与苹果、与吃苹果的需求有什么关系呢?你想吃苹果,是需求吗?或者,回到问题的源头:你感到饥饿了吗?

大多数人面临问题的时候是茫然的,急迫于解决当下的、现实的那个需求——例如够到那个苹果。然而正如你明天要面临面试官一样,你甚至不知道面试的公司是怎样的经营状况,不知道自己究竟可以给面试官展示什么。你不了解那棵苹果树,正如你也不了解自己为什么想吃苹果。

三年前的问题

三年前,当你开始走向这个方向时,你是否了解过这条道上会有这样的一棵树?你是否了解过这棵树的高度?是否了解过他何时结出果子?是否真的确认过你会面临这样的需求?

所有的问题,在你三年前开始行程时你都没有提出过。所以你忘记了准备充足的净水,忽略了道旁的那根长竿。你不知日夜,埋头前行,在大雪纷飞的日子里,你走过了最富庶的平原,而现在你来到了这只有苹果树的山岭。

你从来没有规划过行程,没有准备过面对选择——树对于你的,或你对于树的选择。也或者在你准备明晨起行的这一刻,你并没有想过再过三年后你会面临怎样的境地。

例如明天,你会面临结业,会面临面试,会面临淘汰,会面临打压,会面临流言……

三年前,你可曾为了明天而做过准备?

有苹果吗?是苹果树吗?

能吃吗?


你确信你的道路上有苹果?你确信你面前的是苹果树?你确信它能吃?你确信你到达的时候它不是青涩的,或干脆连花骨朵都未谢去?

你调查过这条路吗,例如问问先行者:IT行业是不是你的未来?你学习过辨别他们的方法吗,例如软件开发与程序编写之间究竟有何种不同?你又是否知道这个行业的走向,例如互联网是不是你的前途,或者相比之下,嵌入式开发是否更加容易或更有前途?

你有过选择吗?你给了自己选择的空间吗?三年前,在你填报专业的时候,或在你走进校园的时候,你是否就开始了自我的选择呢?

被选择

当你所有进行选择的主动权都丧失时,你就只能面临被选择。例如伟大的牛顿就被一棵苹果树选择了一次——那个苹果正好掉在了他的头上。

然而当你有这样的想法时,你环顾四周:所有的人都在木然行走,并等待着苹果掉在他们的头上。他们像行动的木乃伊——不需要水,不需要食物,即使一个苹果能让他们重生,他们也没有过这种需要。因为他们并不知道自己想要什么,想去哪里。即使一个苹果很偶然的、幸运地砸在了某个木乃伊的头上,他们要么仆然倒地,要么像范进一样颠狂。

牛顿之所以是被选择者,除了苹果掉落之外,也在于牛顿不是木乃伊。苹果落在头上的概率本来就很低,而你不是木乃伊的概率就更低了。无怪乎整个行业都在感叹人才缺失,无怪乎黎叔总在生气,而装钱的那个包裹却总也到不了手。

黎叔生气的时候,钱就在他的面前。选择无时不在,只不过被选择者茫然无知罢了。

再做一根长竿

亡羊补牢,为时未晚,与其懊恼在行来的路上丢掉了那根长竿,不如现在动手再做一根。然而你问问路旁的老者,他说:你不但要先有锯刨,还得有木料;要有木料,你得先有刀斧;要有刀斧,你得先炼铁煅钢……如此等等,你最终变成了一名矿工,着眼于时下的那个需求:得到一些铁矿。

Joy在数年前就断言过我的过失:别人找我要苹果,我却说应该做个梯子去够,然后就从怎样做木匠开始讲。我成了故事中的愚人,因为我不但解决不了需求,还制造了麻烦。

所以从比我更聪明的人的角度来看:我们现在不需要梯子,我们不能为解决一个需求而制造更多的需求。是啊,你居然在讨论“制造需求”,然而你可知道长竿的需求来自何处?它来自于你三年前丢掉了长竿,来自于你三个月前绕了弯路而陡耗了干粮,来自于你三天前扭伤了脚而不能爬树,来自于你三个小时前开始的饥饿,来自于你三分钟前看见了这棵树……

而到你需要帮助的时候,路旁只剩下了这个老头儿,并告诉你从左边的小道过去,就是一家矿山,你可以学到挖矿的本领。在你开始怀疑这是否是陷阱的时候,老者已经开始收拾小板凳要回家了。

天终于要黑了。我想,你是倒霉到家了。

陷阱

是的,所有的疑问与假设都是陷阱——包括那个干巴老头儿都是我拉来串场的(所以他也走得比别人更匆忙)。现在让我们越过所有所有的陷阱,回到最初的两个问题:你饿了;你想吃一个苹果。

《程序员》杂志的欧阳在与我开始讨论之初,只是询问我是否对职业规划有过想法。我当然是有的,我的人生计划在16岁前后定下的。基本上,定了20年——我没说谎话。我的计划向来比较长,像两三天看一本书,一个月看几本这种计划,我没有。所谓常立志不如立志长,我属于后者。

对于程序员的职业发展方向,我在《大道至简》中谈过我的看法:“程序员有两条路可选。一个是深入源码,在技术领域里求精求深,变成良匠大师。一个是看透工具的本质,从技术、语言这些东西中走出来,面向团队、工程,成为管理人员。”对于这样的选择,欧阳感叹说:技术人员面临一大堆技术方向,迷惑得要命。至于前途职业,基本上没法考虑。

的确如此,我想这也是《程序员》做这一期专栏的目的。然而我认为从根本上来说,他们不是“面临一大堆技术方向”而迷惑的,大多数程序员是因为“不知道自己要什么”而迷惑的。所以欧阳正好把问题看反了。而且,我所知的,绝大多数人都会把这个问题看颠倒。

一般人都不知道自己“想要什么”,谈何规划?当一些人把目标直指金钱——例如把“想要什么”这个问题直接变成了“三年挣50万”,那么你说,这样的目标如何规划?

生存与规划

欧阳兄最后问我:那么应该怎么回答“想要什么”这个问题呢?

如果抛开阶段性不谈,“想要什么”其实就是一个社会观、人生观的问题。我无法对任何一个人的社会观、人生观提出指责或建议,因此我不能跨越阶段性的、特指人群的回答这个问题。然而,当我把这个问题局限在“初入社会、需要规划的人”这一个阶段中的群体时,我想是可以有答案的。

这个答案就是“我要独立”。 “我要独立”包括两个方面:独立地思考,独立的生存。注意,我说的是“思考”和“生存”,而是不是“思想”与“生活”。

首先,学会独立思考,学会为自己的思考和选择负责。这就是独立了。接下来说“独立生存”。就是真正失去依赖感,不要认为有谁能帮你,时时得觉得自己活不下去了:房子要自己买、老婆要自己娶、社会关系要自己打点、时时面临失业的危险……诸如此类。这些就是生存了。

这个时候你再来看你的“规划”。你说是“挣100万”现实呢,还是“明天找份工作”更现实?是“等爸爸妈妈介绍份工作”现实,还是“明天接受一份800块钱月薪的工作”更现实?

所以,你的规划的第一条会写着:活下去;第二条会写着:存点小钱,保证半年内找不到工作不会饿死;第三条会写着:做好每一份工作,尊重同事,并获得尊重。

欧阳叹道:难道这些就是规划吗?

我说:怎么规划?这些就是规划。规划书上写着:一年内10万,三年内50万,十年内退休。哦,那种人一辈子也不要指望他成功。

如果不是为生存而规划

也许上面这个规划对你是合适的,也许不合适。你既可以把自己置于生存的绝境,从800块钱的小工做起,也可以通过借贷,并开启第一年挣10万块的规划。问题并不在于规划的形式,也不在于是不是要规划为“做一个程序员”。

问题只在于你是否自知。要首先自知,然后才知道一个规划如何能切实。所以我一直问,“自己想要什么”。因而当我们把问题讨论到更深层面的时候,却发现大多数人是因为不了解自己,而根本“做不了规划”,而不是“做什么”的问题。

现在,你有开始问自己“为什么做不了规划”吗?

如果你信誓旦旦说自己已经会做规划了,那么你怎么会看到现在这篇文章呢?如果你不会,那么为什么你要看到上面这行文字,才想起来问自己“为什么不会”呢?

你可有反观自己?你可有时时省身?你可在三年开始抉择一根长竿的取舍?你可有开始为三年后见到一棵苹果树而做准备?你,是否仍然期待苹果掉在你的头上?而在这伟大的期望的同时,却行走得如同一具木乃伊?!

我们讨论方法时,总是可以非常简单。例如你只是想吃一个苹果,那么最直接的求解就是“得到一个苹果”,方法则是爬上树摘一个,或买一个,或用竿子捅一个下来。又如果你只想明天去应聘,那么你可以去猜应聘试题或贿赂相关人员。但是“吃一个苹果”和“应付一次面试”只是一个短期行为,职业规划却是一个长期行为。如果你三年前就开始想自己要做什么工作并开始规划“如何通过应聘达到这个目的”,那么你的规划中一定会包括“能力补充”、“了解指定公司的情况 ”等等这些看起来像炼钢、做锯子一类的事情。

我们讨论规划——而不是实施这个规划的方法时,问题就变得异常的复杂。人人都想吃到苹果,然而没有多少人在乎“全民吃到苹果”,所以大多数人从来没有考虑过苹果如何摘下来,以及苹果树在哪里这些问题——他们的想法是:谁想明白就让他自己去搞明白好了。

周爱民为啥开始讲苹果问题了

不管我曾有过多长的规划(例如二十年),但我现在被邀请写这篇文章,是要告诉别人(多数的从业者们)如何“能做一个规划”。

于是,我也茫然了。

最近的一段时间,我接受的一些约稿几乎全是有关于从业的。然而我不太愿意写雷同的东西,因此写到本篇的时候,我想讨论的只是把问题想清楚,而不是解决问题。一直以来,我都有这种“把问题想清楚”的冲动,这与我的职业角色有关:“想清楚”是架构师的第一要务,而把结果做出来则次之。在如此长时间的、与专业程序员们的交流中,我发现大多数情况下,人们是没有把问题想清楚就开始实作了的——例如根本没有想清楚开发的目标是什么,就着手开发;又如没想清楚从业者们“想要什么”,就帮助他们解决“如何规划”的问题。

更进一步地去理解那些期望通过这篇文章来得到一个“令人满意的”规划的朋友们,问题的根源并非他是否有“想清楚问题”的意愿,而在于你是否有这种能力。在我看来,这种能力与他们是否有反观自身的习惯有关,因为这些问题的答案,原本就在他们自己的身上。冷暖自知,我不能超越个体感受与意愿地去为别人设计或提供规划。所以,在大多数情况下,我总是在解说和质问:“你”如何把问题想清楚?

“想清楚”的意愿,如果发生在今天,那么你面临的总是当下的问题;如果发生在昨天,那么你总是有机会为明天作出准备——例如规划。至于在规划与努力的最后,或者当下,你吃到嘴里的那一口苹果是不是有虫,则是你的运气问题了。

作者简介:

周爱民(aimingoo),具有十余年的软件开发、项目管理和团队建设的经验,现担任盛大网络的平台架构师,著有《大道至简》、《Delphi源代码分析》等。
posted @ 2009-02-11 17:05 装不满的瓶子 阅读(172) 评论(0) 编辑
2009年1月17日
IBatis模糊查詢

<!--
在ibatis中使用安全的拼接语句,动态查询
ibatis比JDBC的优势之一,安全高效
说明文字在注释中
-->


  
<select id="selectAllProducts" parameterClass="Product" resultMap="ProductResult">
     select id,note from Product
       
<dynamic prepend="WHERE">
       
<!-- isNotNull判断参数是否存在,Integer类型 -->
            
<isNotNull property="id">
                
<!-- isGreaterThan判断参数是否大于compareValue,isGreaterEquals是大于等于 -->
                
<isGreaterThan prepend=" and " property="id" compareValue="0">
                 id = #id#
                
</isGreaterThan>
            
</isNotNull>
            
<!-- isNotEmpty判断字串不为空,isEmpty可以判断字串为空 -->
            
<isNotEmpty prepend=" and " property="note">
            
<!-- 模糊查询不能用#,#在是用prepareStatement的?插入参数,$是文本替换 -->
             note like '%$note$%'
            
</isNotEmpty>
        
</dynamic>
  
</select>
  
用Map传参数
  
  
<select id="selectAllProducts" parameterClass="java.util.HashMap" resultMap="ProductResult">
     select id,note from Product
       
<dynamic prepend="WHERE">
       
<!-- isPropertyAvailable判断属性是否有效 -->
          
<isPropertyAvailable property="id">
            
<isNotNull property="id">
                
<!-- isLessThan判断参数是否小于compareValue,isLessEquals是小于等于 -->
                
<isLessThan prepend=" and " property="id" compareValue="10">
                 id = #id#
                
</isLessThan>
            
</isNotNull>
          
</isPropertyAvailable>
        
</dynamic>
  
</select>
<!--------------------------------------------------------------------几个常用属性-->

<isPropertyAvailable> 属性是存在
<isNotPropertyAvailable> 属性不存在
<isNull> 属性值是null
<isEmpty> 判断Collection.size<1或String.length()<1
<isEqual
> 等于
<isNotEqual> 不等于
<isGreaterThan> 大于
<isGreaterEqual> 大于等于
<isLessThan> 小于
<isLessEqual> 小于等于

posted @ 2009-01-17 13:13 装不满的瓶子 阅读(3688) 评论(4) 编辑
仅列出标题  
Copyright ©2012 装不满的瓶子