项目经验总结:
从大一(11届)暑假进入我们专业的创新实验室以来,跟着系主任等老师做了大大小小的项目有5、6个左右了,开始做项目时都是为了完成任务而完成任务,现在大三了开始带项目了,自己也在项目中做最核心的模块,现在已经不再是为完成任务而做了,现在更多的是进行知识的积累和总结,今天开始自己项目总结的第一篇博客。(以前虽然有过总结但是没有写上博客),希望自己能坚持总结,然后不断的进步,加油!
基础知识的重要性:
在大三的上学期我开始慢慢的看书了,在梳理自己的知识体系,当然这时的基础知识有了很大的进步,这直接在项目中发挥了优势。
window对象的location属性中的assign(url)方法、href属性、replace(url)方法:
它们的功能都是进行页面的跳转,assign(url)与href的功能完全一样,在跳转页面后能点击浏览器的后退按钮后退到前一个页面,但是用replace(url)跳转过来后不能后台到前一个页面。
用纯js删除某个js节点的所有子节点:
两种方法:
var parentNode = document.getElementById("id");//删除该父节点的所有子节点
1,
while(parentNode.firstChild){
var oldNode = parentNode.removeChild(parentNode.firstChild);
oldNode = null; //将节点对象从内存中手动移除
}
2,
var childs = parentNode.children;
for(var i=childs.length -1;i>=0;i--){
var old = parentNode.removeNode(childs[i]);
old = null;
}
这里有两个地方需要注意:将删除的节点手动设置为null,这是一个很好的习惯;在者用for循环进行删除时要从后往前进行删除,因为childs为类数组,而且是动态的,就是说,将第一个节点删除后,原来的第二个节点将会变为第一个节点,但是i已经往前加了,所以将不能删除完全,而从后往前面删除则不会遇到这个问题,其实这只是基础知识中的一个知识点,childs类数组它是动态的。
图片的加载,当某个路径图片不存在时不要将图片加载出来:
有两种截然不同的思路来解决这个问题,某个路径不存在图片,我先将其加载错误的地址,然后将该节点删除;第二种是在加载前进行判断,如果地址指向的图片不存在,那么我就不将图片加入文档流中;
1,第一种方法给img元素绑定onerror();方法,当图片不存在时触发,然后将节点删除即可,这种方法兼容性比较可靠。
2,在加载前进行判断:
function isExists(url){ //传入的路径需要是绝对路径
var imageObj = new Image(url);
imageObj.src = url; //将图片缓存在浏览器中,这个在另外一些地方也会用到
if(imageObj.fileSize > 0 || (imageObj.width > 0 && imageObj.height >0)){
return true; //即使if里面只有一个语句,加上大括号是非常有必要的
}
else{
return false;
}
}
4,js中的delete
最起初的想法delete当然可以删除所有的一切元素,还很滑稽的使用它去删除dom元素(用removeChild方法进行删除),这里我很自信的告诉你delete只能删除ECMA中的对象的属性和数组中的元素,如:
var delObj = {
a : '1',
b : 'b'
};
delete delObj.a;当你在去访问delObj.a时结果是undefined,这个很正常被你删除了的嘛;(建议你对delete的使用只在这里);
var arrObj = [1,2,3,4,5];
delete arrObj[0];
当你再次访问arrObj[0]时将返回undefined,但是数组的长度将不会改变;最好不用这个方法删除数组元素,完全可以使用solice方法来进行替代.