在ifram父子之间通讯时要判断父子页面是否都加载完毕再执行相应的方法,可以用onload判断是否加载完毕,
父调用子:window.frame["iframeName"].FunctionName;
子调用父:parent.FunctionName();
一般影响DOM操作的代码写在$(function()){}里面,而普通的function建议写在<script>中,$(function)外面,Iframe调用时是调用window上的方法,而写在$(fucntion)就变成Jq上的了,全局window是调用不到$(function)里面的方法的
Html5的audio元素不能在安卓手机上自动播放,因此要用Js新建一个audio对象,进行操作
jQuery 插件
<html>
<head>
<meta charset="utf-8">
<title>插件写法Test</title>
<style type="text/css">
</style>
</head>
<body>
<div id="1" class="green">1</div>
<div id="2" class="green">2</div>
<div id="3" class="green">3</div>
</body>
<script src="js/jquery-1.9.0.min.js"></script>
<script>
(function($){
$.fn.initBg = function(options){
var options = $.fn.extend({},options || {});
return this.each(function(index,target){
$(target).css({
'width':options.width,
'height':options.height,
'background':options.background,
'margin-top':'10px'
})
if($.isFunction(options.complete)){
options.complete.call(this,this,index);
}
})
}
})(jQuery)
var result = $(".green").initBg({
width:'100px',
height:'100px',
background:'green',
complete:function(target,index){
console.log($(target).attr('id'))
console.log(index)
}
})
</script>
</html>
1、作用,建立封闭的作用域,避免$符号其他插件冲突,在function里面可以使用jQuery和$,都代表jQuery插件
(function($){
<span style="white-space:pre"> </span>
})(jQuery)
</pre><pre name="code" class="javascript">2、$.fn.say() = function(){} 调用方式 $(".input").say(),意思可以被jq创建对象调用,相当于把say()方法写到jQuery对象的原型对象里面
$.say() = function(){} 调用方式:$.say(),只能被jq调用
</pre><pre name="code" class="javascript">3、$.extend({},options) 将所有参数合并并不影响原来的结构,结果是一个合并后的对象。
4、用call或者apply方法实现回调
5、this.each() this指向调用该方法的jq对象.$.each()遍历每个对象
</pre><pre name="code" class="javascript">参考:http://jingyan.baidu.com/album/e75aca85550216142edac63b.html?picindex=1
setTimeout()是异步执行的
<span style="white-space:pre"> </span>var t=true;
setTimeout(function(){
console.log(123);
t=false;
},1000);
while(t){ }
alert('end');
结果:不输出end,因为setTimeout是异步的,因此会继续执行while(t),就算时间到了,编辑器还是会继续执行完这个语句才会去执行setTimeout里面的东西,因为是死循环,所以不会执行setTimeout里面的东西,不会输出end
事件:
1、事件流:
事件捕获:从最顶层document-到具体事件DOM元素
事件冒泡:从触发事件的元素-->上一层元素(包含)---->顶层(document)
2、DOM事件流三阶段:事件捕获、处于目标阶段、事件冒泡(处于目标阶段被看作是冒泡的一部分)
3、事件处理程序:事件名(click),事件处理程序(onclick:function(){}),绑定事件处理程序可以在DOM元素或者Js上
DOM元素:<button id="test" onclick:"alert(this.id)"></button> 或者 <buttonid="test" onclick:"showId()"></button>
Js:var btn = document.getElementById("test"); btn.οnclick=function(){}
都存在同样缺点:还没解释到相应的处理事件程序,点击没反应,js方法可以使用try(){}catch(ex){}捕获错误,使浏览器不报错
3.1、DOM0级事件处理程序 btn,οnclick=function(){ alert)this) } this 指向实际触发事件元素
DOM2级:btn,addEventListener(eventName,evenFuc.boolean)
,btn,removeEventListener(eventName,evenFuc.boolean)
参数:事件名,事件处理程序,true:在捕获阶段处理,false:在冒泡阶段处理。一般要在 捕获阶段处理举例子:onBeforeEdit();
IE事件处理程序:attachEvent(),detachEvent()
参数onclick(事件处理程序名),事件处理程序fucntion
跨浏览器:
<span style="white-space:pre"> </span>var EventUntil = function(element,eventName,hander){
addHandler:function(element,eventName,hander){
if (element.addEventListener) {
element.addEventListener(eventName,hander,false);
} else if (element.attachEvent) {
element.attachEvent("on"+eventName,hander)
} else {
element.["on" + eventName] = hander;
}
},
removeHandler:function(element,eventName,hander){
if (element.removeEventListener ) {
element.removeEventListener(eventName,hander,false);
} else if (element.detachEvent) {
element.detachEvent("on"+eventName,hander)
} else {
element.["on" + eventName] = null;
}
},
getEvent:function(event){
return event ? event || window.event;
},
getTarget:function(event){
return event.target || event.srcElement;
},
preventDefault:function(event){
if (event.preventDefault) {
event.preventDefault();
} else {
event.returnValue = false;
}
}
stopPropagation:function(event){
if (event.stopPropagation) {
event.stopPropagation();
} else {
event.cancelBubble = true;
}
}
}
3.2事件对象:
Dom事件对象:[event] ,btn.onclick = function(event){alert(this)} this指向event.currentTarget,执行事件处理程序的元素,而event.target指向实际的触发事件元素,是 btn,有时候事件处理程序绑定在body上,点击button,由于事件在body绑定,事件冒泡,currentTarget指向body,target指向btn
event.preventDefault()取消默认事件处理,例如<a>标签自动触发href
event.stopPropagation()取消冒泡,如果btn 有onclick,body也有onclick,取消冒泡后body的不触发
eventPhase属性判断事件在哪个阶段
IE事件对象:[window.event] ,btn.onclick = function(event){alert(this)} this指向全局的window,因为函数在全局执行,而event.srcElement指向实际的元素,是btn
cancelBubble默认值false,设置true可以取消冒泡
returnValue默认true,设置false取消默认行为
srcElement:触发事件的DOM元素
type:事件类型
跨浏览器的事件对象:自己研究下,与添加事件处理程序差不多。
Dom部分:
Node:常见节点类型:element<元素>,text<文本>,attribute<属性>。
document:children与childNodes,第一个获取孩子元素<element>节点,第二个获取所有孩子节点,包括文本节点
节点类型 | NodeType |
---|---|
元素element | 1 |
属性attr | 2 |
文本text | 3 |
注释comments | 8 |
文档document | 9 |
node属性:parentNode[上一级的父节点],nextSibling,previousSibling,childrenNodes,lastChild,firstChild,若不存在则为null
node方法:appendChild(newNode) 如果newNode是在文档中出现过,则newNode会删除原来的Node,并插入到新的位置,因此需要配合document.createElement()使用
someNode.insertBefore(oldNode)在oldnode前插入元素、replaceChild(newNode,oldNode)用newNode替换oldNode、removeChild()删除子节点