<小知识总结>

在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()删除子节点


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值