JS高级应用(一)
}光标停在文本框文字的最后: function toEnd() {
var e = event.srcElement;
var r = e.createTextRange();
r.moveStart("character", e.value.length);
r.collapse(true);
r.select();
}
<input type="text" value="end" >屏蔽功能键(Shift, Alt, Ctrl) function testKey() {
if (event.shiftKey) { // altKey; ctrlKey
alert("Shift");
}
}不要滚动条: <body scroll="no">让竖条没有: <body style="overflow:scroll; overflow-y: hidden">让横条没有: <body style="overflow:scroll; overflow-x: hidden">去掉图片链接点击后图片周围的虚线: <a href="#" ><img src="test.jpg"></a>在子窗体中刷新父窗体: window.opener.location.reload()设置打开窗口的大小: <body 100)">设置打开窗口的位置: <body 100)">得到窗体大小: document.body.clientWidth; document.body.clientHeight;TEXTAREA自适应文字行数: <textarea rows="1" cols="17" onpropertychange="this.style.posHeight=this.scrollHeight></textarea>屏蔽脚本错误: function killErrors() {
return true;
}
window.onerror=killErrors();判断是否是字符: if (/[^/x00-/xff]/g.test(str)) {
alert("有汉字");
} else {
alert("全是字符");
}screen.属性: availHeight 获取系统屏幕的工作区域高度,排除 Microsoft® Windows® 任务栏。 availWidth 获取系统屏幕的工作区域宽度,排除 Windows 任务栏。 bufferDepth 设置或获取用于画面外位图缓冲颜色的每像素位数。 colorDepth 获取用于目标设置或缓冲区的颜色每像素位数。 deviceXDPI 设置或获取系统屏幕水平每英寸点数(DPI)的数值。 deviceYDPI 设置或获取系统屏幕垂直每英寸点数(DPI)的数值。 fontSmoothingEnabled 获取用户是否在控制面板的显示设置中启用了圆整屏幕字体边角的选项。 height 获取屏幕的垂直分辨率。 logicalXDPI 获取系统屏幕水平每英寸点数(DPI)的常规数值。 logicalYDPI 获取系统屏幕垂直每英寸点数(DPI)的常规数值。 updateInterval 设置或获取屏幕的更新间隔。 width 获取屏幕的垂直分辨率。得到div的height值: div.offsetHeight(带滚动条的完整高度) div.clientHeight(内容的高度)
//各种尺寸
s?? +=??"\r\n网页可见区域宽:"+?? document.body.clientWidth;
s?? +=??"\r\n网页可见区域高:"+?? document.body.clientHeight;
s?? +=??"\r\n网页可见区域高:"+?? document.body.offsetWeight?? +"?? (包括边线的宽)";
s?? +=??"\r\n网页可见区域高:"+?? document.body.offsetHeight?? +"?? (包括边线的宽)";
s?? +=??"\r\n网页正文全文宽:"+?? document.body.scrollWidth;
s?? +=??"\r\n网页正文全文高:"+?? document.body.scrollHeight;
s?? +=??"\r\n网页被卷去的高:"+?? document.body.scrollTop;
s?? +=??"\r\n网页被卷去的左:"+?? document.body.scrollLeft;
s?? +=??"\r\n网页正文部分上:"+?? window.screenTop;
s?? +=??"\r\n网页正文部分左:"+?? window.screenLeft;
s?? +=??"\r\n屏幕分辨率的高:"+?? window.screen.height;
s?? +=??"\r\n屏幕分辨率的宽:"+?? window.screen.width;
s?? +=??"\r\n屏幕可用工作区高度:"+?? window.screen.availHeight;
s?? +=??"\r\n屏幕可用工作区宽度:"+?? window.screen.availWidth;
//过滤数字
<input type=text onkeypress="return event.keyCode>=48&&event.keyCode<=57||(this.value.indexOf('.')<0?event.keyCode==46:false)" onpaste="return !clipboardData.getData('text').match(/\D/)" ondragenter="return false">
//特殊用途
<input type=button value=导入收藏夹 onclick="window.external.ImportExportFavorites(true,'http://localhost');">
<input type=button value=导出收藏夹 onclick="window.external.ImportExportFavorites(false,'http://localhost');">
<input type=button value=整理收藏夹 onclick="window.external.ShowBrowserUI('OrganizeFavorites', null)">
<input type=button value=语言设置 onclick="window.external.ShowBrowserUI('LanguageDialog', null)">
<input type=button value=加入收藏夹 onclick="window.external.AddFavorite('http://www.google.com/', 'google')">
<input type=button value=加入到频道 onclick="window.external.addChannel('http://www.google.com/')">
<input type=button value=加入到频道 onclick="window.external.showBrowserUI('PrivacySettings',null)">
//不缓存
<META HTTP-EQUIV="pragma" CONTENT="no-cache">
<META HTTP-EQUIV="Cache-Control" CONTENT="no-cache, must-revalidate">
<META HTTP-EQUIV="expires" CONTENT="0">
//正则匹配
匹配中文字符的正则表达式: [\u4e00-\u9fa5]
匹配双字节字符(包括汉字在内):[^\x00-\xff]
匹配空行的正则表达式:\n[\s| ]*\r
匹配HTML标记的正则表达式:/<(.*)>.*<\/\1>|<(.*) \/>/??
匹配首尾空格的正则表达式:(^\s*)|(\s*$)(像vbscript那样的trim函数)
匹配Email地址的正则表达式:\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*
匹配网址URL的正则表达式:http://([\w-]+\.)+[\w-]+(/[\w- ./?%&=]*)?
以下是例子:
利用正则表达式限制网页表单里的文本框输入内容:
用正则表达式限制只能输入中文:onkeyup="value=value.replace(/[^\u4E00-\u9FA5]/g,'')" onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\u4E00-\u9FA5]/g,''))"
1.用正则表达式限制只能输入全角字符: onkeyup="value=value.replace(/[^\uFF00-\uFFFF]/g,'')" onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\uFF00-\uFFFF]/g,''))"
2.用正则表达式限制只能输入数字:onkeyup="value=value.replace(/[^\d]/g,'') "onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\d]/g,''))"
3.用正则表达式限制只能输入数字和英文:onkeyup="value=value.replace(/[\W]/g,'') "onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\d]/g,''))"
//消除图像工具栏
<IMG SRC="mypicture.jpg" HEIGHT="100px" WIDTH="100px" GALLERYIMG="false">??
or
<head>
<meta http-equiv="imagetoolbar" content="no">
</head>
//光标停在文字最后
<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()">
//页面进入和退出的特效
进入页面<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??
//计算内容宽和高
<SCRIPT?? language="javascript">
function?? test(obj)
{
?? var?? range?? =?? obj.createTextRange();
?? alert("内容区宽度:?? "?? +?? range.boundingWidth
????????????? +??"px\r\n内容区高度:?? "?? +?? range.boundingHeight?? +??"px");???
}
</SCRIPT>
<BODY>
<Textarea id="txt" height="150">sdf</textarea><INPUT?? type="button"?? value="计算内容宽度"?? onClick="test(txt)">
</BODY>
//无模式的提示框 function modelessAlert(Msg)
{
window.showModelessDialog("javascript:alert(\""+escape(Msg)+"\");window.close();","","status:no;resizable:no;help:no;dialogHeight:height:30px;dialogHeight:40px;");
}
//屏蔽按键
<html>
<head>
?? <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
?? <noscript><meta http-equiv="refresh" content="0;url=about:noscript"></noscript>
?? <title>屏蔽鼠标右键、Ctrl+N、Shift+F10、Alt+F4、F11、F5刷新、退格键</title>
</head>
<body>
<script language="Javascript"><!--
??//屏蔽鼠标右键、Ctrl+N、Shift+F10、F11、F5刷新、退格键
??//Author: meizz(梅花雨) 2002-6-18
function document.oncontextmenu(){event.returnValue=false;}//屏蔽鼠标右键
function window.onhelp(){return false} //屏蔽F1帮助
function document.onkeydown()
{
??if ((window.event.altKey)&&
?? ((window.event.keyCode==37)|| //屏蔽 Alt+ 方向键 ←
?? (window.event.keyCode==39))) //屏蔽 Alt+ 方向键 →
?? {
??? alert("不准你使用ALT+方向键前进或后退网页!");
??? event.returnValue=false;
?? }
???/* 注:这还不是真正地屏蔽 Alt+ 方向键,
??? 因为 Alt+ 方向键弹出警告框时,按住 Alt 键不放,
??? 用鼠标点掉警告框,这种屏蔽方法就失效了。以后若
??? 有哪位高手有真正屏蔽 Alt 键的方法,请告知。*/
??if ((event.keyCode==8)?? || ?? ?? ?? ?? ???//屏蔽退格删除键
?? (event.keyCode==116)|| ?? ?? ?? ?? ???//屏蔽 F5 刷新键
?? (event.ctrlKey && event.keyCode==82)){ //Ctrl + R
??? event.keyCode=0;
??? event.returnValue=false;
??? }
??if (event.keyCode==122){event.keyCode=0;event.returnValue=false;}??//屏蔽F11
??if (event.ctrlKey && event.keyCode==78) event.returnValue=false; //屏蔽 Ctrl+n
??if (event.shiftKey && event.keyCode==121)event.returnValue=false;??//屏蔽 shift+F10
??if (window.event.srcElement.tagName == "A" && window.event.shiftKey)??
?? window.event.returnValue = false; ?? ?? ?? //屏蔽 shift 加鼠标左键新开一网页
??if ((window.event.altKey)&&(window.event.keyCode==115)) ?? ?? ?? //屏蔽Alt+F4
?? {
?? window.showModelessDialog("about:blank","","dialogWidth:1px;dialogheight:1px");
?? return false;
?? }
}
</script>
屏蔽鼠标右键、Ctrl+N、Shift+F10、Alt+F4、F11、F5刷新、退格键
</body>
</html>
//屏蔽打印
<style>
@media print{
* {display:none}
}
</style>
//刷新后不变的文本框 <HTML>
<HEAD>
<META NAME="save" CONTENT="history">
<STYLE>
.sHistory {behavior:url(#default#savehistory);}
</STYLE>
</HEAD>
<BODY>
<INPUT class=sHistory type=text id=oPersistInput>
</BODY>
</HTML>
//访问剪贴板
event.dataTransfer.setData("URL", oImage.src);
sImageURL = event.dataTransfer.getData("URL")
(2)普通访问
window.clipboardData.setData("Text",oSource.innerText);
window.clipboardData.getData("Text");
//操作COOKIE
function SetCookie(sName, sValue)
{
document.cookie = sName + "=" + escape(sValue) + "; ";
}
function GetCookie(sName)
{
var aCookie = document.cookie.split("; ");
for (var i=0; i < aCookie.length; i++)
{
??var aCrumb = aCookie.split("=");
??if (sName == aCrumb[0])??
??return unescape(aCrumb[1]);
}
??
}
function DelCookie(sName)
{
document.cookie = sName + "=" + escape(sValue) + "; expires=Fri, 31 Dec 1999 23:59:59 GMT;";
}
//setTimeout增加参数
<script>
var _st = window.setTimeout;
window.setTimeout = function(fRef, mDelay) {
if(typeof fRef == 'function'){
??var argu = Array.prototype.slice.call(arguments,2);
??var f = (function(){ fRef.apply(null, argu); });
??return _st(f, mDelay);
}
return _st(fRef,mDelay);
}
function test(x){
alert(x);
}
window.setTimeout(test,1000,'fason');
</script>
//自定义的apply,call
Function.prototype.apply = function (obj, argu) {
if (obj) obj.constructor.prototype._caller = this;??
var argus = new Array();
for (var i=0;i<argu.length;i++)
?? argus = "argu[" + i + "]";
var r;
eval("r = " + (obj ? ("obj._caller(" + argus.join(",") + ");") : ("this(" + argus.join(",") + ");")));
return r;
};
Function.prototype.call = function (obj) {
var argu = new Array();
for (var i=1;i<arguments.length;i++)
?? argu[i-1] = arguments;
return this.apply(obj, argu);
}; ?? ???
//下载文件
function DownURL(strRemoteURL,strLocalURL)
{
try
{
??var xmlHTTP=new ActiveXObject("Microsoft.XMLHTTP");
?? xmlHTTP.open("Get",strRemoteURL,false);
?? xmlHTTP.send();
??var adodbStream=new ActiveXObject("ADODB.Stream");
?? adodbStream.Type=1;//1=adTypeBinary
?? adodbStream.Open();
?? adodbStream.write(xmlHTTP.responseBody);
?? adodbStream.SaveToFile(strLocalURL,2);
?? adodbStream.Close();
?? adodbStream=null;
?? xmlHTTP=null;
}
catch(e)
{
?? window.confirm("下载URL出错!");
}
//window.confirm("下载完成.");
}
//检验连接是否有效
function getXML(URL)??
{
var xmlhttp = new ActiveXObject("microsoft.xmlhttp");
xmlhttp.Open("GET",URL, false);??
try
{??
?? xmlhttp.Send();
}
catch(e){}
finally??
{
??var result = xmlhttp.responseText;
??if(result)??
?? {
if(xmlhttp.Status==200)
{
return(true);
}
else??
{
return(false);
}
?? }
??else??
?? {
return(false);
?? }
}
}