注意:
1).当页面要加载较大的图片或信息时,此时还没有onload,所以原本想隐藏的模块此时可能会出现:
解决办法有:将script标签放在body结束之前
W3C中有DOMContentLoaded事件只要等到Html加载完成而不需要等到 图片等加载完成。
IE
2).console.dir()
3).IE和火狐下CSS透明度设置不一样
IE: filter:alpha(opacity=50);
ff: opacity:0.6;
4).页面加载时,由于页面缓存可能让表单默认被选上,但是相应定义的事件没有发生,处理的方法有:
1.在加载页面时就检测。
5)Select 增加元素可以用:add()方法,selectObject.add(option,before)
参数描述
option必需。要添加选项元素。必需是 option 或 optgroup 元素。
before必需。在选项数组的该元素之前增加新的元素。如果该参数是null,元素 添加到选项数组的末尾。
将select内容清空则可以将其长度变为0;
6).y=+x;功能 为将x转换成数字。
7).onchange 事件为当内容发生变化并且光标移出的时候发生。
8).禁止粘贴:可以用
obj.onpaste=function(){ return false;};
9).使用innerHTML='';清空节点可能会导致内存泄漏,影响性能和速度。
10).document.createDocumentFragment();//文档片段
11).事件对像:evt.target.tagName=="SPAN",通过evt.target获取触发事件的元素
比如onclick事件是在一个大的容器中定义,但是想知道容器中是哪 个子元素触发 了事件就可以 用evt.target个来获取些元素。
但是在IE下面名称不同:srcElement
12).eval_r(),把字符串当作javascript语言执行
13).数组slice(n)方法,从数组下标为n的地方开始截取。比如a=[1,2,3,45];
var arr=a.slice(2);结果 arr为[3,45];
14).arguments会随着函数上下文而变化
15).在javascript中浮点数运算的精确度不高比如0.3-0.1会等于0.19999999999999
16).图像预加载。
17).括号 的作用是将表达示求值并返回给上下文。
18).取消浏览器的默认行为:
if (evt) evt.preventDefault();//W3c
else window.event.returnValue=false;//IE
19).table插入行和单元格
插入行:insertRow();
插入单元格:insertCell();
20).自己定义的HTML属性使用getAttribute获取
21).在IE和火狐下清除选中:
if(document.selection &&document.selection.empty){
document.selection.empty();//IE
}
elseif(window.getSelection){
window.getSelection().removeAllRanges();
}
22).setCapture() 只有IE支持
让一个元素可以捕获所有的鼠标事件。
可以用alert()或者releaseCapture(),打断当前的鼠标捕获。
setCapture()可以用在对DIV的拖动效果上。就不用给body设置onmousemove事件了,直接给DIV设置,然后通过
setCapture()让它捕获所有的鼠标事件。
23.在浏览器状态栏上显示:window.status=' ';
24.offsetParent() 定位的父节点
25.在拖动等模块中可能在浏览器中定义的一个事件还没有结束 就跳到其它窗口中(也是是窗口失焦),当回到浏览器窗口时本来应该结束的事件还在执行。处理这种事件的方法有:
1).给窗口添加失焦事件如:addEvent(window,'blur',this.mouseupHandle);
但是此种方法在不同浏览器下执行的效果不一样。可能会出现问题。
2).
26.在一个类中有时一个方法只需要 在构造的时候调用,这样 我们就可以把这个方法写成静态方法,比如init()这个方法是DND这类的构造方法则可以写DND.init=function(){}
27.status,readyState状态
1. 在javascript中函数
var a=abc;与a=abc()的区别,其中abc为函数
使用document.body.getElementByTagName();
2.onload对像 使用方法 :
window.onload=abc;
function abc(){
……
}
3.javascript 的函数可以嵌套着写
4.使用 window.prompt()用户在弹出窗口写入数据
5.获取元素:
getElementById();
getElementsByTagNmae();
getElementByName();
6.获取和设置属性
for属性使用htmlFor
class 使用className
getAttribute('id');
setAtrribute('title','value');
7.结点
文本也算是节点
注意:空格也会被当作文本结点。//不同浏览器不一样
nodeType——节点类型,元素节点是1,文本节点是3
nodeValue——节点值,元素节点为空,文本节点的nodeValue属性即为文本内容
firstChild——该元素节点包含的第一个子节点
lastChild——该元素节点包含的最后一个子节点
nextSibling——该节点的后一个兄弟节点
previousSibling——该节点的前一个兄弟节点
childNodes——子节点列表,可以通过node.childNodes[index](或node.childNodes.item(index))来获取子节点
nodeName——节点名称,对于元素节点,返回tagName,对于文本,则返回#text
parentNode-----访问父节点
8.nodeValue 与 innerHTML的区别:
在nodeValue中插入html标签将不会被解析而在innerHTML中会被解析
9.函数方法
join():
join(separator) 方法用于把数组中的所有元素放入一个字符串。
使用separator分隔,如果没有写分隔符默认为用‘,’分开
用法: a.join(" ");
push():
push() 方法可向数组的末尾添加一个或多个元素,并返回新的长度
arrayObject.push(newelement1,newelement2,....,newelementX)
参数 描述
newelement1 必需。要添加到数组的第一个元素。
newelement2 可选。要添加到数组的第二个元素。
newelementX 可选。可添加多个元素。
shift():
方法用于把数组的第一个元素从其中删除,并返回第一个元素的值。
语法: arrayObject.shift()
unshift():
方法可向数组的开头添加一个或更多元素,并返回新的长度。
语法:arrayObject.unshift(newelement1,newelement2,....,newelementX)
参数 描述
newelement1 必需。向数组添加的第一个元素。
newelement2 可选。向数组添加的第二个元素。
newelementX 可选。可添加若干个元素。
charAt():
方法可返回指定位置的字符。
10.创建,删除节点……//不同浏览器方法不一样
createAttribute (name)用给定名称name创建特性节点
createCDATASection (text)用包含文本text的文本子节点创建一个CDATA Section
createComment(text) 创建包含文本text的注释节点
createDocumentFragment() 创建文档碎片节点
createElement_x (tagname)创建标签名为tagname的元素
createEntity Reference(name)创建给定名称的实体引用节点
createProcessing Instruction(target, data)创建包含给定target和data的PI节点
createTextNode(text) 创建包含文本text的文本节点
replaceChild(a,b);b为被替换的节点,a为新节点
node.insertBefore(新节点,旧节点必须是node的子节点);
appendChild():
HTML元素方法
在指定元素节点的最后一个子节点之后添加节点
removeChild();
移除节点
node.removeChild(node的子节点);
cloneNode(); 克隆节点
op.cloneNode(bool);true表示连同子节点一起克隆,falsh表示只克隆节点本身
11.表单:
获取表单元素可以使用的方法:
1).getElementById();
2).document.formname;
3).getElementByTagName("form");
访问表单元素:
表单提供elements方法获取 form中有所有表单控件:
var fm = document.forms[0];
alert(fm.elements.length);
onsubmit方法:
当表单提交时会发生submit事件,我们可以设置事件监听,当用户提交表单时检查表 单内容。同时,如果用户输入有误,要阻止表单提交,可以在事件处理函数里return false就行了,当正确时可以调用表单的submit方法提交表单,使用表单的submit方法时 不会执行submit事件处理函数
文本框默认内容: defaultValue
下拉框的属性:selectedIndex 返回选中项的下标
检测IE:navigator.userAgent.indexof("MSIE")>=-1;
光标焦点:onFocus
失去焦点:onblur
移除焦点:blur
12.事件
事件检测:
由于火狐与IE不兼容所以使用:evt=evt || event ;
其中evt|| event 表示当evt为true时返回evt,当不为true时检测event如果为真就返回
13.事件流
冒泡:
如果不想让事件向上级传播可以阻止,方法为:
evt.stopPropagation();//此方法是w3c的方法
IE使用方法:evt.cancelBubbble=true;
捕获
IE不支持,W3C支持
捕获 从上到下
阻止默认:
1).return false;//不好
2).preventDefault(); 如evt.preventDefault();//IE不支持
3).event.returnValue=false;//IE的方法
14.arguments,call,calle,apply
callee;//注意 callee 属性是 arguments 对象的一个成员,它表示对函数对象本身的引用
var sum =function(n)
{
if (n <=0) return 1;
else return n +arguments.callee(n - 1)
}
calland apply:它们的作用都是将函数绑定到另外一个对象上去运行,两者仅在定义参数方式有所区别
call方法:fn.call(obj);
将fn的this指向obj的this
15. setInterval, clearInterval
//setInterval(code,time);此函数的功能是每隔time毫秒刷新一次,并且执行code
//clearInterval(id)
var int=self.setInterval("clock()",50)
function clock()
{
var t=new Date()
document.getElementByIdx_x("clock").value=t
}
15. 引用
取当前的毫秒数: var da=+new Date;
toFix 指定小数位 var n=68;n.toFix(2)等于68.00
toExponential(),返回科学计数法,n.toExponential(1)等于6.8e+1
localCompare();字符排序
ECMAScript 提供了两种方法从子串创建字符串值,即 slice() 和substring()。这两种方法返回的都是要处理的字符串的子串,都接受一个或两个参数。第一个参数是要获取的子串的起始位置,第二个参数(如果使用的话)是要获取子串终止前的位置(也就是说,获取终止位置处的字符不包括在返回的值内)。如果省略第二个参数,终止位就默认为字符串的长度。slice()和 substring() 方法都不改变 String 对象自身的值。它们只返回原始的 String 值,保持 String对象不变。
slice(-3) ,slice可以用负数,从后面开始向前
16.正则表达式
修饰符 描述
i 执行对大小写不敏感的匹配。
g 执行全局匹配(查找所有匹配而非在找到第一个匹配后停止)。
m 执行多行匹配。
方括号用于查找某个范围内的字符:
表达式 描述
[abc] 查找方括号之间的任何字符。
[^abc] 查找任何不在方括号之间的字符。
[0-9] 查找任何从 0 至 9 的数字。
[a-z] 查找任何从小写 a 到小写 z 的字符。
[A-Z] 查找任何从大写 A 到大写 Z 的字符。
[A-z] 查找任何从大写 A 到小写 z 的字符。
[adgk] 查找给定集合内的任何字符。
[^adgk] 查找给定集合外的任何字符。
(red|blue|green) 查找任何指定的选项。
元字符
元字符(Metacharacter)是拥有特殊含义的字符:
元字符 描述
. 查找单个字符,除了换行和行结束符。
\w 查找单词字符。
\W 查找非单词字符。
\d 查找数字。
\D 查找非数字字符。
\s 查找空白字符。
\S 查找非空白字符。
\b 查找位于单词的开头或结尾的匹配。
\B 查找不处在单词的开头或结尾的匹配。
\0 查找 NUL 字符。
\n 查找换行符。
\f 查找换页符。
\r 查找回车符。
\t 查找制表符。
\v 查找垂直制表符。
\xxx 查找以八进制数 xxx 规定的字符。
\xdd 查找以十六进制数 dd 规定的字符。
\uxxxx 查找以十六进制数 xxxx 规定的 Unicode 字符。
量词
量词 描述
n+ 匹配任何包含至少一个 n 的字符串。
n* 匹配任何包含零个或多个 n的字符串。
n? 匹配任何包含零个或一个 n的字符串。
n{X} 匹配包含 X 个 n 的序列的字符串。
n{X,Y} 匹配包含 X 或 Y 个 n 的序列的字符串。
n{X,} 匹配包含至少 X 个 n 的序列的字符串。
n$ 匹配任何结尾为 n 的字符串。
^n 匹配任何开头为 n 的字符串。
?=n 匹配任何其后紧接指定字符串 n的字符串。
?!n 匹配任何其后没有紧接指定字符串 n的字符串。
正则功能:::
说明:re表示正则表达示,one 表示要匹配的字符
1).查看某个字符串是不是在另一个字符的开始位置:
1. 正则表达示
2.判断(s.indexof("he")===0) 如果为真那"he"是在字条串s的开始位置
2).查看字符串中是否有空格
re=/\s/;
re.test(one);如果为真则有空格,反之没有
3).分组匹配
re=/^([a-z]+)\s+(\d+)/i
vararr=re.exec(one);
返回的值arr为一个数组,其中第一个是匹配的全部值,以后依次为匹配的分组的值
4).将空格换为空
全部替换:replace(/\s+/g,'');
5).split(x)将字符串用x分割成数组。
one.split(/\s+/);
6).s.search(one);查找one在s中的位置,找不到就返回-1
one.search('');
7).match()方法
和exec方法,只是掉用的方法不同exec是(正则式).exec(字符串),而match方法为(字符串).match(正则式)
8).indexOf()方法:方法可返回某个指定的字符串值在字符串中首次出现的位置。
indexOf("要查找 的字符串")
indexOf("要查找的字符串","从字符串那里开始查找");//返回的还是从0开始记数
9).lastIndex 规定下次匹配的起始位置//可以手动设置
10).贪婪匹配:能匹配多少就匹配多少
惰性:能匹配少一些就匹配少一些,在量词后面加上?号就可以表示
11).非捕获性分组:
将一个分组当作分组去匹配但是在返回的时候 不返回值:实现方法
在正则中在分组当面加上?: 如:re=/(\d+)(?:[a-z])/;其中+)(?:[a-z])不会返回值
12).re=/(\d{3})-\1/; 其中\1表示第一个分组
17.样式、定位
1.) clientWidth和clientHeight属性给出元素的可视部分的宽度和高度,当有滚动条时,只返回可见区域大小,对于块级元素,将返回元素的所设置的宽度和高度加上填充(padding)
2).offsetWidth ,offsetHeight 元素实际所占大小
3.)scrollLeft和scrollTop,它们用来获得那些具有滚动条的元素滚动条滚动的距离,而没有滚动条的元素,它总返回0.
18.使用javascript建书签
FF方法:window.sidebar.addPanel(name,address,"");
IE方法:window.external.addFavorite(address,name);
19. Javascript静态属性和方法
JavaScript中,每个function都拥有一个原型对象prototype,通过这个对象可以为这个类定义各种属性和方法,但是这样定义的属性和方法是所有该类的对象所共有的,效果上和同这个类的父类中继承的字段和方法差不多。通常我们使用function的原型来创建类的方法,而用普通方式来创建类的属性。
1).为什么不用原型来创建属性
因为原型创建的内容是这个类所有对象所共享的,对于一个属性而言,不同的类的对象的值都不一样。如果使用原型对象来创建对象属性,那么任何一个类的对象修改了自己的某个属性,其他对象的相同属性也会被修改。
这么做的本质是因为:属性是各个对象不同的,要求对象自己保存自己该属性的值,而方法对于所有对象而言都是一样的,没有必要每个对象都保存一个方法,只要由类的原型保存一份,各个对象使用方法的时候调用这些方法就可以了。
2).为什么要用原型来保存方法
因为方法对所有类对象来说都是一样的,如果用传统方式定义,那样每个类的对象被定义的时候,该对象都会保存这个方法的信息,这样会耗
费很多资源。而使用原型来保存,所有的方法都保存在原型中,每个对象需要使用方法的时候就调用原型对象中保存的方法。节省了资源。
20.页面隐藏元素的几种方法:
1).node.style.display='nine';//因为使用此方法会使整个页面的布局会改变
none此元素不会被显示。
block 此元素将显示为块级元素,此元素前后会带有换行符。
inline 默认。此元素会被显示为内联元素,元素前后没有换行符。
inline-block 行内块元素。(CSS2.1 新增的值)
list-item 此元素会作为列表显示。
run-in 此元素会根据上下文作为块级元素或内联元素显示。
compact CSS 中有值 compact,不过由于缺乏广泛支持,已经从 CSS2.1 中删除。
marker CSS 中有值 marker,不过由于缺乏广泛支持,已经从 CSS2.1 中删除。
table 此元素会作为块级表格来显示(类似 ),表格前后带有换行符。
inline-table 此元素会作为内联表格来显示(类似 ),表格前后没有换行符。
table-row-group 此元素会作为一个或多个行的分组来显示(类似 )。
table-header-group 此元素会作为一个或多个行的分组来显示(类似 )。
table-footer-group 此元素会作为一个或多个行的分组来显示(类似 )。
table-row 此元素会作为一个表格行显示(类似 )。
table-column-group 此元素会作为一个或多个列的分组来显示(类似 )。
table-column 此元素会作为一个单元格列显示(类似 )
table-cell 此元素会作为一个表格单元格显示(类似
table-caption 此元素会作为一个表格标题显示(类似
inherit 规定应该从父元素继承 display 属性的值。
2). node.style.visibility='hidden';
此方法仅是让元素所占的区域变成透明或者空白,但是所占的位置还在。
值 描述
visible 默认值。元素是可见的。
hidden 元素是不可见的。
collapse当在表格元素中使用时,此值可删除一行或一列,但是它不会影响表格的布局。被行或列占据的空间会留给其他内容使用。如果此值被用在其他的元素上,会呈现为"hidden"。
inherit 规定应该从父元素继承 visibility 属性的值。
3). node.preantNode.removeChlid(node)
//性能消耗很大
21.获取样式
window.getComputedStyle(node,null) //火狐
node.currentStyle //IE
22.事件
dblclick:双击事件,此方法在不同的浏览器中可能 出现 不同的效果。
23.json(JavaScript ObjectNotation)
javascript 对象标记法。
)和
) |