<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<title>获取元素属性</title> 
</head> 
<body> 
<div id="roboth"></div> 
<div id="test"></div>
<script type="text/javascript"> 

 

<!--获取属性-->

var div=document.getElementById("roboth"); 
alert(div.attributes.getNamedItem(
"id").nodeValue); 
alert(div.attributes.item(
0).nodeValue); 
alert(div.getAttributeNode(
"id").nodeValue); 
alert(div.getAttribute(
"id"));

 
<!--添加属性-->
document.getElementById("test").attachEvent("onclick",func);
</script> 
</body> 
</html>

 

posted @ 2012-02-03 10:36 dufy 阅读(62) 评论(0) 编辑
  在SQL Server的性能调优中,有一个不可比拟的问题:那就是如何在一段需要长时间的代码或被频繁调用的代码中处理临时数据集?表变量和临时表是两种选择。记得在给一家国内首屈一指的海运公司作SQL Server应用性能评估和调优的时候就看到过大量的临时数据集处理需求,而他们的开发人员就无法确定什么时候用临时表,什么时候用表变量,因此他们就简单的使用了临时表。实际上临时表和表变量都有特定的适用环境。

  先卖弄一些基础的知识:

  表变量

  变量都以@或@@为前缀,表变量是变量的一种,另外一种变量被称为标量(可以理解为标准变量,就是标准数据类型的变量,例如整型int或者日期型DateTime)。以@前缀的表变量是本地的,因此只有在当前用户会话中才可以访问,而@@前缀的表变量是全局的,通常都是系统变量,比如说@@error代表最近的一个T-SQL语句的报错号。当然因为表变量首先是个变量,因此它只能在一个Batch中生存,也就是我们所说的边界,超出了这个边界,表变量也就消亡了。

  表变量存放在内存中,正是因为这一点所有用户访问表变量的时候SQL Server是不需要生成日志。同时变量是不需要考虑其他会话访问的问题,因此也不需要锁机制,对于非常繁忙的系统来说,避免锁的使用可以减少一部分系统负载。

  表变量另外还有一个限制就是不能创建索引,当然也不存在统计数据的问题,因此在用户访问表变量的时候也就不存在执行计划选择的问题了(也就是以为着编译阶段后就没有优化阶段了),这一特性有的时候是件好事,而有些时候却会造成一些麻烦。

  临时表

  临时对象都以#或##为前缀,临时表是临时对象的一种,还有例如临时存储过程、临时函数之类的临时对象,临时对象都存储在tempdb中。以#前缀的临时表为本地的,因此只有在当前用户会话中才可以访问,而##前缀的临时表是全局的,因此所有用户会话都可以访问。临时表以会话为边界,只要创建临时表的会话没有结束,临时表就会持续存在,当然用户在会话中可以通过DROP TABLE命令提前销毁临时表。

  我们前面说过临时表存储在tempdb中,因此临时表的访问是有可能造成物理IO的,当然在修改时也需要生成日志来确保一致性,同时锁机制也是不可缺少的。

  跟表变量另外一个显著去别就是临时表可以创建索引,也可以定义统计数据,因此SQL Server在处理访问临时表的语句时需要考虑执行计划优化的问题。

  表变量 vs. 临时表

 

表变量 临时表
数据集的存储位置 内存(不考虑被换到页面文件这种情况) 磁盘(不考虑访问后被缓存到内存中)
是否需要日志
是否可以创建索引
是否可以使用统计数据
是否可以在多会话中访问
是否需要锁机制

 

  结论

  综上所述,大家会发现临时表和表变量在底层处理机制上是有很多差别的。

  简单地总结,我们对于较小的临时计算用数据集推荐使用表变量。如果数据集比较大,如果在代码中用于临时计算,同时这种临时使用永远都是简单的全数据集扫描而不需要考虑什么优化,比如说没有分组或分组很少的聚合(比如说COUNT、SUM、AVERAGE、MAX等),也可以考虑使用表变量。使用表变量另外一个考虑因素是应用环境的内存压力,如果代码的运行实例很多,就要特别注意内存变量对内存的消耗。

  一般对于大的数据集我们推荐使用临时表,同时创建索引,或者通过SQL Server的统计数据(Statisitcs)自动创建和维护功能来提供访问SQL语句的优化。如果需要在多个用户会话间交换数据,当然临时表就是唯一的选择了。需要提及的是,由于临时表存放在tempdb中,因此要注意tempdb的调优。

 

文章来源

http://database.ctocio.com.cn/tips/442/8206442.shtml

posted @ 2012-01-14 22:33 dufy 阅读(18) 评论(0) 编辑

我们有时候希望回车键敲在文本框(input element)里来提交表单(form),但有时候又不希望如此。比如搜索行为,希望输入完关键词之后直接按回车键立即提交表单,而有些复杂表单,可能要避免回车键误操作在未完成表单填写的时候就触发了表单提交。 要控制这些行为,不需要借助JS,浏览器已经帮我们做了这些处理,这里总结几条规则:
1、如果表单里有一个type=”submit”的按钮,回车键生效。
2、如果表单里只有一个type=”text”的input,不管按钮是什么type,回车键生效。
3、如果按钮不是用input,而是用button,并且没有加type,IE下默认为type=button,FX默认为type=submit。
4、其他表单元素如textarea、select不影响,radio checkbox不影响触发规则,但本身在FX下会响应回车键,在IE下不响应。
5、type=”image”的input,效果等同于type=”submit”,不知道为什么会设计这样一种type,不推荐使用,应该用CSS添加背景图合适些。

实际应用的时候,要让表单响应回车键很容易,保证表单里有个type=”submit”的按钮就行。而当只有一个文本框又不希望响应回车键怎么办呢?我的方法有点别扭,就是再写一个无意义的文本框,隐藏起来。根据第3条规则,我们在用button的时候,尽量显式声明type以使浏览器表现一致。
这个位高人还留下来一个 demo (点击查看) 列出了一些例子。

转自: http://shake863.javaeye.com/blog/363809

posted @ 2012-01-03 21:06 dufy 阅读(45) 评论(0) 编辑

转载文章:

一、
<html>
<head>
<title>smsx.cab</title>
<!--
MeadCo ScriptX -->
<object id="factory"
style="display:none"
classid="clsid:1663ed61-23eb-11d2-b92f-008048fdd814"
codebase="smsx.cab#Version=6,3,435,20">
</object>

<script
defer>
function window.onload() {
if (!factory.object)
{
alert("打印控件没有正确安装!");

return;
} else {
// -- advanced
features
factory.printing.SetMarginMeasure(2); // measure
margins in inches
factory.printing.printer = "HP DeskJet
870C";
factory.printing.paperSize =
"A4";
factory.printing.paperSource = "Manual
feed";
factory.printing.collate =
true;
factory.printing.copies = 2;

factory.printing.SetPageRange(false, 1, 3); // need pages from 1 to 3


// -- basic features

factory.printing.header = "This is MeadCo";

factory.printing.footer = "Printing by ScriptX";

factory.printing.portrait = true;

factory.printing.leftMargin = 5.0;

factory.printing.topMargin = 5.0;

factory.printing.rightMargin = 5.0;

factory.printing.bottomMargin = 5.0;

}
}
</script>
<script language="javascript">
function
printTure()
//打印函数
{
document.all("dayindiv").style.display="none";//隐藏按钮
factory.printing.Print(true);
//调用控件打印
document.all("dayindiv").style.display="";//显示
}
function
Print(frame) {
factory.printing.Print(true, frame) // print with
prompt
}
</script>
</head>
<body>
<div>
<pre>

我被打印出来了:
十二因缘的解脱观

苦灭谛,乃是逆著十二因缘的次第,从断绝第十二因缘的老死,向上推转,

到了第一因缘的无明断绝之时,即是超凡入圣的解脱境界及涅盘境界。

也就是说,
要想不「老」不「死」,唯有设法不再出「生」;

要想不再出生,便不得造下「有」漏的生死之因;

要想不造生死之因,对于贪恋的事物,便当立即放下求「取」和舍不得的心念;

要想无取无求,唯有首先排除避苦求乐的「爱」欲心;

要想无爱欲心,便当不再领「受」苦乐的感觉;

要想不受苦乐所动,当求六根清净,不与六尘接「触」;

要求六根不触六尘,唯有不起「六入」;六入是由「名色」所成,

要求不起六入,便不宜求生投入母胎;投胎的主体是业「识」,故应先破业识;

业识是由前世「行」为的集聚而成,
故当先勿造作有漏的善恶行为;
所谓有漏
(sasrava),是指本著有我的意念,由身口所作的一切行为,不论是为身心的私我,

或为群体社会国家世界的公我,乃至是为宇宙全体的神我,

均系有我有漏的生死业,为何有我的观念存在呢?乃因众生皆在「无明」的愚疑之中,何谓无明愚疑?

即是没有智慧,不能明察我们所处的五蕴世间,都是因缘和合而成的,暂时的,不实在的幻景,

所以误将众生各自所造的身心乃至宇宙,

当作「我」来维护与贪恋。如果能将此无明排除之后,便可修好解脱之船的漏洞,

平安地航出生死的苦海了。

如何排除无明,那是要靠修行八正道来完成的工作,也就是下面所要介绍的道谛之内容了。
</pre>
</div>
<div>
<p
style="page-break-before:always">我在另外一页</p>
</div>
<div
align="center" id="dayindiv" name="dayindiv">
<input type=button
value="打印本页" onclick="printTure()">
<input type=button value="页面设置"
onclick="factory.printing.PageSetup()">
<input type=button value="打印预览"
onclick="factory.printing.Preview()">
</div>
</body>
</html>
 
二、

最近做一小程序需要对Web打印进行精细的位置控制,IE自身的打印功能基本上算是半残废,无法自定义纸张,无法直接打印,并且由于浏览器版本或操作系统本身的设置问题,连最基本的边距设置都会有问题,总之打印已经成为Web程序的最大难题,因此使用ActiveX控件打印是最好的解决方案,但现在的控件动不动就价格几千上万,所幸目前免费的选择还有两个,一是windows系统本身带有WebBrowser.ExecWB控件,但这个由于系统的安全设置方面的限制,用起来不太灵光,二是使用第三方的控件ScriptX(http://www.meadroid.com/scriptx/),ScriptX基本功能免费,但高级功能是收费的,下面我就把最近在项目中使用ScriptX的经验总结一下。更多细节您可以查看官方手册:http://www.meadroid.com/scriptx/docs/printdoc.htm,
另注:ScriptX破解不太好找,
因为是破解版,因此没有电子签名,需要将站加入信任站点当中,并修改部分安全规则


注:我邮件附件发送出现问题,现在已传到CSDN空间下载地址:http://download.csdn.net/source/558406


简单使用:
在页面head中引入控件:
<object id=factory viewastext
style="display:none"
classid="clsid:1663ed61-23eb-11d2-b92f-008048fdd814"
codebase="ScriptX.cab#Version=6,3,435,20">
</object>
设置打印参数:

<script defer>
// -------------------基本功能,可免费使用-----------------------
factory.printing.header = "";//页眉
factory.printing.footer = "";//页脚

factory.printing.SetMarginMeasure(1);//页边距单位,1为毫米,2为英寸
//边距设置,需要注意大部分打印机都不能进行零边距打印,即有一个边距的最小值,一般都是6毫米以上
//设置边距的时候时候如果设置为零,就会自动调整为它的最小边距
factory.printing.leftMargin = 7;//左边距
factory.printing.topMargin = 7;//上边距
factory.printing.rightMargin = 7;//右边距
factory.printing.bottomMargin = 7;//下边距

factory.printing.portrait = true;//是否纵向打印,横向打印为false

//--------------------高级功能---------------------------------------------

factory.printing.printer = "EPSON LQ-1600KIII";//指定使用的打印机
//factory.printing.printer = "\\\\cosa-data\\HPLaserJ";//如为网络打印机,则需要进行字符转义
factory.printing.paperSize = "A4";//指定使用的纸张

factory.printing.paperSource = "Manual feed";//进纸方式,这里是手动进纸
factory.printing.copies = 1;//打印份数
factory.printing.printBackground = false;//是否打印背景图片
factory.printing.SetPageRange(false, 1, 3); //打印1至3页

//---------------------常用函数--------------------------------
factory.printing.Print(false);//无确认打印,true时打印前需进行确认
factory.printing.PrintSetup();//打印设置
factory.printing.Preview();//打印预览
factory.printing.WaitForSpoolingComplete();//等待上一个打印任务完全送入打印池,在连续无确认打印时非常有用
factory.printing.EnumPrinters(index);//枚举已安装的所有打印机,主要用于生成打印机选择功能
</script>


示例截图

不能用是因为控件被拦截,允许就可以了

 
posted @ 2011-11-07 18:34 dufy 阅读(419) 评论(0) 编辑
//ID元素下的所有input,并设置为不可用
$("input", $("#id")).attr("disabled"true);

 

//设置name为test的checkbox是否为选中状态。返回值为true|false
$("input[name='test']").attr("checked");

 

//下拉列表值改变时触发
$(document).ready(function () {
    $(
"select").change(function () {
         alert($(
this).val());
    })
})

 

//查找含有date-myself属性的input对象
$(":input[date-myself]")

 

//全选,取消全选
$("#全选复选框ID").click(function () {
   $(
"input[name='单个复选框name值']").attr("checked", $(this).attr("checked"));
})

//点击所有,全选选中。全选状态下,取消一个选择,全选取消
var checkBoxCount = $("input[name='CalculateCheck']").length;
$(
"input[name='CalculateCheck']").click(function () {
        
var checkedCount = $("input[name='CalculateCheck']:checked").length;
        $(
"#CalculateChkAll").attr("checked", checkBoxCount == checkedCount);
})

 

//juqery UI中,弹出层并加载指定页面。
function ShowDialog(url) {
   $(
"#DivID").dialog({
      autoOpen: 
true,
      width: 
650,
      height: 
500
      resizable: 
true,
      title: 
"测试",
      modal: 
true,
      open: 
function (event, ui) {
              $(
this).load(url + "?" + event.timeStamp, nullfunction () {
              $(
":input:first").focus();
              });
            },
      close: 
function (event, ui) {
                $(
"#DivID").children().remove();
                }
   });
}

 

//下拉列表选中的text值
$("#下拉列表ID").find("option:selected").text();
//获取下拉列表选中的索引
$("#ddlregtype ").get(0).selectedindex

//获取下拉列表选中的value  
$("#下拉列表ID").val();

//获取下拉列表选中的索引:
$("#下拉列表ID").get(0).selectedindex;

//设置下拉列表选中的索引(index为索引值):
$("#下拉列表ID").get(0).selectedindex=index;

//设置下拉列表选中的value:
$("#下拉列表ID").attr("value","normal");
$("#下拉列表ID").val("normal");
$(
"#下拉列表ID").get(0).value = value;
 
//设置下拉列表选中的text:
var count=$("#下拉列表IDoption").length;
for(var i=0;i<count;i++)  
{        
    
if($("#下拉列表ID").get(0).options[i].text == text)  
        {  
            $(
"#下拉列表ID").get(0).options[i].selected = true;  
            
break;  
        }  
}

$(
"#下拉列表ID option[text='jquery']").attr("selected"true);
 
//设置下拉列表option项:

//添加一项option
$("#下拉列表ID").append("<option value='value'>text</option>");
 
//在前面插入一项option 
$("#下拉列表ID").prepend("<option value='0'>请选择</option>");

//删除索引值最大的option 
$("#下拉列表ID option:last").remove(); 
//删除索引值为0的option
$("#下拉列表ID option[index='0']").remove();
//删除值为3的option
$("#下拉列表ID option[value='3']").remove(); 

//删除text值为4的option
$("#下拉列表ID option[text='4']").remove(); 
 
//清空 select:
$("#下拉列表ID").empty();

    

 

//jquery parseJSON
var obj =  $.parseJSON(('{"name":"John"}');
alert( obj.name === "John" );

 

//英文字符转大写
$('input[type="text"]').each(cfunction (n, v) {
        $(v).keyup(function (e) {

             $(v).val($(v).val().toLocaleUpperCase());
        });
});
posted @ 2011-06-18 12:19 dufy 阅读(53) 评论(0) 编辑
摘要: 感觉此篇文章通俗易懂,转来分享。最近在网上查阅了不少Javascript闭包(closure)相关的资料,写的大多是非常的学术和专业。对于初学者来说别说理解闭包了,就连文字叙述都很难看懂。撰写此文的目的就是用最通俗的文字揭开Javascript闭包的真实面目。 一、什么是闭包? “官方”的解释是:所谓“闭包”,指的是一个拥有许多变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达式的一部分。 相信很少有人能直接看懂这句话,因为他描述的太学术。我想用如何在Javascript中创建一个闭包来告诉你什么是闭包,因为跳过闭包的创建过程直接理解闭包的定义是非常困难的。看下面这段阅读全文
posted @ 2011-03-02 10:55 dufy 阅读(26) 评论(0) 编辑
摘要: 每次到开源网站看到GPL、Apache这样的授权都不明白是什么意思,网上找了篇文章,作为知识扩展。------------------------------------------------------------------------------------------- 以下文章问转载 当Adobe、Microsoft、Sun等一系列巨头开始表现出对”开源”的青睐...阅读全文
posted @ 2010-11-25 17:07 dufy 阅读(24) 评论(0) 编辑
摘要: 原文出处:http://blog.csdn.net/txz2003/archive/2009/11/06/4775513.aspx 可在虚拟目录中添加web.config文件(实际为文本文件) 文件格式如下 <configuration> <system.webServer> <staticContent> <mimeMap fileExtensio...阅读全文
posted @ 2010-11-25 10:06 dufy 阅读(346) 评论(0) 编辑
摘要: keycode 0 =keycode 1 =keycode 2 =keycode 3 =keycode 4 =keycode 5 =keycode 6 =keycode 7 =keycode 8 = BackSpace BackSpacekeycode 9 = Tab Tabkeycode 10 =keycode 11 =keycode 12 = Clearkeycode 13 = Enterke...阅读全文
posted @ 2010-11-22 14:14 dufy 阅读(664) 评论(0) 编辑
摘要: 本文转载几乎所有的大型应用都会有自己的用于跟踪调试的API。Log4net是用于.NET开发环境的日志记录包。以下为ASP.NET调试API:Log4net使用指南。1 简介 1.1 Log4net的优点: 几乎所有的大型应用都会有自己的用于跟踪调试的API。因为一旦程序被部署以后,就不太可能再利用专门的调试工具了。然而一个管理员可能需要有一套强大的日志系统来诊断和修复配置上的问题。 经验表明,日...阅读全文
posted @ 2010-11-11 14:07 dufy 阅读(352) 评论(0) 编辑