问题总结(一)地址:
http://blog.csdn.net/xyr05288/article/details/51655594
一.伪数组转为数组
关于js中伪数组
伪数组:
• 具有length属性;
• 按索引方式存储数据;
• 不具有数组的push()、pop()等方法;
伪数组无法直接调用数组方法或期望length属性有什么特殊的行为,不具有数组的push()、pop()等方法,但仍可以对真正数组遍历方法来遍历它们。这种对象有很多,比较特别的是function内的arguments对象,还有像调用getElementsByTagName, document.childNodes之类的,它们都返回的NodeList对象都属于伪数组,也称为类数组,还有自定义的对象,也属于伪数组。我们可以通过Array.prototype.slice.call(fakeArray)将伪数组转变为真正的Array对象。
代码例子如下:
var fakeArray01 = {0:’a’,1:’b’,length:2};//这是一个标准的伪数组对象
var arr01 = Array.prototype.slice.call(fakeArray01);
alert(arr01[0]);//a
var arr02 = [].slice.call(fakeArray01);
alert(arr02[0]);//a
还有就是,jQuery中的$()对象都是伪数组对象,其中保存的是DOM对象,基于此,也就更好理解jQuery中的this,目前就理解到这里了,就酱!
转数组的通用函数:
//浏览器兼容 将类数组转化为数组的方法
function makeArray(c) {
try {
//IE8 调用此方法会出错
return Array.prototype.slice.call(c);
}
catch (e) {
var ret = [], i = 0, len = c.length;
for (; i < len; i++) {
ret[i] = (c[i]);
}
return ret;
}
}
二 复制文本
//在html 元素中定义onclick函数 无法直接获取事件参数
//需要用window.event先获取事件
function onClickCopy(obj){
var event = window.event || arguments.callee.caller.arguments[0];
if(event.preventDefault){
event.preventDefault();
}else{
event.returnValue = false;
}
if(event.stopPropagation){
event.stopPropagation();
}else{
event.cancelBubble = true;
}
var clickObj = obj;
...
var copyText = "要复制的文本";
//这里借用input元素复制 复制完后 再将其删除
var inputEle = document.createElement("input");
inputEle.type = "text";
inputEle.value = copyText;
clickObj.parentNode.appendChild(inputEle);
inputEle.focus();
inputEle.select();
document.execCommand("Copy");
clickObj.parentNode.removeChild(inputEle);
}
三. 事件对象
跨浏览器的事件对象
var EventUtil = {
addHandler: function(element,type,handler){
if(element.addEventListener){
// 可选。布尔值,指定事件是否在捕获或冒泡阶段执行。
// true - 事件句柄在捕获阶段执行
// false- false- 默认。事件句柄在冒泡阶段执行
element.addEventListener(type,handler,false);
}else if(element.attachEvent){//IE
element.attachEvent("on" + type, handler);
}else{
element["on" + type] = handler;
}
},
removeHandler:function(element,type,handler){
if(element.removeEventListener){
element.removeEventListener(type, handler, false);
}else if(element.detachEvent){
element.detachEvent("on" + type, handler);
}else{
element["on" + type] = null;
}
},
getEvent: function(event) {
return event ? event : window.event;
},
getTarget: function(event) {
return event.target || event.srcElement;
},
preventDefault: fuction(event) {
if(event.preventDefaule()) {
event.preventDefaule();
} else {
event.returnValue = false;
}
},
stopPropagation: function(event) {
if(event.stopPropagation()) {
event.stopPropagation();
} else {
event.cancelBubble = true;
}
}
};