先看这个HTML 代码

<ul>
 <li id="item1" onclick="check()">1<div id="div">1.1</div></li>
 <li id="item2">2</li>
 <li id="item3">3</li>
</ul>

显然,在IE里面,ul的子节点只包含DOM节点,即三个li;但在Firefox里面,ul的子节点却有七个,它包含一个换行,三个文本节点,三个DOM节点li,当我们要用javascript去获取ul 的子节点li时,就有点头痛了。

如上代码,在IE里面,我们可以根据nextSibling从item1那里获取到item2,但在Firefox、Chrome、Opera、Safari里面,获取到的却是object Text。

针对这个问题,可以用document.all来判断,分别解决,因为只有IE才支持document.all。还可以用下面的办法,其实跟document.all差不多

javascript如下

<script type="text/javascript">
function getNextNode(node){
 node=typeof node=="string" ? document.getElementById(node) : node;
 var nextNode=node.nextSibling;
 if(!nextNode) return null;
 if((nextNode.nodeType!=1)&&(nextNode.nextSibling)) nextNode=nextNode.nextSibling;
 return nextNode;
}
function check(){
alert(getNextNode("item1").id);
alert(getNextNode("item2").id);
alert(getNextNode("item3"));
}
</script>

把获取nextSibling的过程用getNextNode()函数封装起来,然后用item1的onclick事件执行check()。

如果还有其他相关的疑问,自己可以改一下代码,看看输出的结果。

 

 

将HTML DOM中几个容易常用的属性做下记录:

nodeName、nodeValue 以及 nodeType 包含有关于节点的信息。

nodeName 属性含有某个节点的名称。

  • 元素节点的 nodeName 是标签名称
  • 属性节点的 nodeName 是属性名称
  • 文本节点的 nodeName 永远是 #text
  • 文档节点的 nodeName 永远是 #document

注释:nodeName 所包含的 XML 元素的标签名称永远是大写的

nodeValue

对于文本节点,nodeValue 属性包含文本。

对于属性节点,nodeValue 属性包含属性值。

nodeValue 属性对于文档节点和元素节点是不可用的。

nodeType

nodeType 属性可返回节点的类型。

最重要的节点类型是:

元素类型 节点类型
元素element 1
属性attr 2
文本text 3
注释comments 8
文档document 9

HTML文件:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 <title>DOM标准</title>
 <script type="text/javascript" src="test.js"></js>
 </head>
 <body>
 <h1 id="h1">An HTML Document</h1>
 <p id="p1">This is a <i>W3C HTML DOM</i> document.</p>
 <p><input id="btnDemo1" type="button" value="取H1 Element节点值"></p>
 <p><input id="btnDemo2" type="button" value="取H1 Element节点文本"></p>
 <p><input id="btnDemo3" type="button" value="取Document Element节点文本"></p>
 <p><input type="button" alt="这是个演示按钮" title="演示按钮提示标题" name="btnShowAttr" id="btnShowAttr" value="按钮节点演示" /></p>
 </body>
 </html>

JS:

function showElement(){
var element=document.getElementById("h1");//h1是一个<h1>标签
alert('nodetype:'+element.nodeType);//nodeType=1
alert('nodeName:'+element.nodeName);
alert('nodeValue:'+element.nodeValue); //null
alert('element:'+element);
}
function showText(){
 var element=document.getElementById("h1");
 var text=element.childNodes[0];
 alert('nodeType:'+text.nodeType);   //nodeType=3
 alert('nodeValue:'+text.nodeValue);   //文本节点的nodeValue是其文本内容
 text.nodeValue=text.nodeValue+"abc"; //文本内容添加修改删除等等。
 alert('nodeName:'+text.nodeName);
 alert(text.data);    //data同样是其内容,这个属性下同样可以增删改。
 }
function showDocument(){
 alert('nodeType:'+document.nodeType);   //9
 alert('nodeName:'+document.nodeName);
 alert(document);
 }
function showAttr(){
 var btnShowAttr=document.getElementById("btnShowAttr"); //演示按钮,有很多属性
 var attrs=btnShowAttr.attributes;
 for(var i=0;i<attrs.length ;i++){
 var attr=attrs[i];
 alert('nodeType:'+attr.nodeType); //attribute 的nodeType=2
 alert('attr:'+attr);
 alert('attr.name:'+attr.name+'='+attr.value);
}
}
function demo(){
 var btnDemo1=document.getElementById("btnDemo1");
 btnDemo1.onclick=showElement;  //按钮1取节点nodetype值
 var btnDemo2=document.getElementById("btnDemo2");
 btnDemo2.onclick=showText;
 var btnDemo3=document.getElementById("btnDemo3");
 btnDemo3.onclick=showDocument;
 var btnShowAttr=document.getElementById("btnShowAttr");
 btnShowAttr.onclick=showAttr;
}
 window.onload=demo;

引自http://www.cnblogs.com/sweting/archive/2009/12/06/1617839.html

 

网站开发开发大概分为前台和后端,前台又可以分为美工,交互设计,js编程。后端了解不多,前端的话,可以按如下思路学习系统学习:
基础知识
1. html + css 这部分建议在 www.w3school.com.cn 上学习,边学边练,每章后还有小测试。之后可以模仿一些网站做些页面。在实践中积累了一些经验后,可以系统的读一两本书,推荐《head first html 与 css 中文版》,这本书讲的太细了,我没能拿出耐心细读。你可以根据情况斟酌。
2. javascript 要学的内容实在很多,如果没有其他编程语言的基础的话,学起来可能要费些力,还是建议先在 w3school上学习。之后建议马上看《javascript语言精粹》,js是一门很混乱的语言,这本书能够帮助你区分哪些是语言的精华,哪些是糟粕,对于语言精华,应该深入学习。糟粕部分能看懂别人写的代码就行,自己就不用尝试了。
进阶
有了以上基础,就可以进行一般的静态网页设计,不过对于复杂的页面还学进一步学习。
1. css。必看《精通css》,看完这本书你应该对:盒子模型,流动,block,inline,层叠,样式优先级,等概念非常了解了。作为练习可以看下《css艺门之匠》这本书,它对标题,背景,圆角,导航条,table,表单等主题都有详细的介绍。
2. javascript。上面提到内容还不足以让你胜任js编程。在有了基础之后,进一步学习内容包括:
a) 框架。推荐jQuery,简单易用,我的第一web项目就是在w3school简单学习后,直接上手jQuery完成的,真的很难简单,很好用。jQuery适用环境有限,对于那些对性能要求很高的页面无法胜任。推荐了解一下 YUI 或百度的 tangram ,都很好用,学习方法也很简单,照着产品文档做几个页面就行了,不用面面俱到,以后遇到问题查文档就行了。框架可以帮你屏蔽浏览器的差异性,让你能更专注与web开发学习的精髓部分。
b) javascript 语言范式 。这个名字可能并不恰当,只是我找不到可以描述“面向对象”,“函数式”这个两个概念的概念。javascript不完全是一个面向对象的语言,它的很多设计理念都有函数编程语言的影子,甚至说如果你不用面向对象,完全可以把它理解成一门函数式编程语言。javascript的很多语言特性,都是因为他具有函数是语言的特点才存在的。这部分推荐先学习面向对象的基本理论,对封装,继承,多态等概念要理解,维基百科,百度百科会是你的帮手,另外推荐《object oriented javascript》,应该有中文版。对与函数式编程我了解的也不系统,不好多说,可以自己百度一下。
c) javascript 语言内部机制。必须弄清如下概念:js中变量的作用域,变量传递方式,函数的定义环境与执行环境,闭包,函数的四种调用方式(一般函数,对象的方法,apply,call),以及四种调用方式下,‘this’指向的是谁。这部分内容你会在《javascript语言精粹》中详细了解。另外,你必须理解json。
d) dom编程,这个web前端工程师的核心技能之一。必读《dom编程艺术》,另外《高性能javascript》这本书中关于dom编程的部分讲的也很好。
e) ajax编程,这是另一核心技术。ajax建议在网上查些资料,了解这个概念的来龙去脉,百度百科,维基百科上的内容就足够了。真正编程是很容易的,如今几乎所有框架都对ajax有良好的封装,编程并不复杂。
f) 了解浏览器差异性。这部分包括css和js两部分,浏览器差异内容很多,建议在实践中多多积累。另外对于浏览器的渲染模式,DOCTYPE等内容应该系统学习。
再进一阶
有了以上知识,对于大多数小型网站,你应该已经可以写出能够工作的代码了。但写出可以运行的代码,只是编程的最初级阶段。更高要求大概还有三方面:1易维护,2可测试,3高性能,如果页面流量有要求,那第四个就是,4低流量。
1. 易维护。对于页面你该理解‘样式’,‘数据’,‘行为’三者分离,对应的当然就是css,html,js。对于js代码,你最好了解设计模式,重构,MVC等内容。
2. 可测性。js代码可测性的主题,我正在研究,欢迎感兴趣的同学联系我,共同学习
3. 高性能。必读《高性能javascript》
4. 低流量。技巧性太强,非一朝一夕之功,不多说
补充
对于前段开发,核心部分基本就这些了,可以根据自己的兴趣爱好选择性学习以下内容。
1. 美工。 大公司都有专业的美工人员,不过如果爱好也可以了解
2. 交互设计。大公司依然有专业人士搞这些,不过如果爱好也可了解。推荐《简约至上》。
3. 后端。应该说前段工程师必须至少了解一门后端语言,不过如果爱好也可深入学习,入手难度比较低的应该是php了。这部分由可分为基于页面,基于框架两种。大型项目都是基于框架开发的,建议至少了解一个MVC框架,php的zend,asp.net 的 asp.net mvc等等太多了,好还框架的设计思想都大同小异。
4. flash。我并没有吧flash作为前端工程的核心技能之一,因为我不会,不过ActionScript应该和js大同小异,可以根据工作需要学习。不过我的原则是能不用就尽量不用,其实很多效果通过js,css都可以实现,完全不需要flash。而且随着html5的发展flash早晚会淘汰。
5. html5和css3 。html5的标准到现在还没有正式发布,不过目前几乎所有新的浏览器都已经开始支持,手机上就更是如此,建议学习,很好,很强大。

前端开发需要学习的内容,很多很杂,我在最开始学习的前两个月也是一片迷茫。一路走来,发现也走了些弯路。美工,交互设计,flash,js,html+css,后端,随便哪种技能,如果学的特别牛,都可以保证你拥有一个职业。想通吃,没个几年怕是不成。关键是选准自己的爱好,深入学习一项,面要铺开,但深度更重要。

 

转自:http://www.zhihu.com/question/19834302/answer/13108148

© 2012 Hedgehog Suffusion theme by Sayontan Sinha