您好,欢迎访问一九零五行业门户网

详谈javascript中DOM的基本属性_javascript技巧

结构和内容属性
nodetype
所有的节点都有类型,节点总共有以下的12种类型。
复制代码 代码如下:
interface node {
// nodetype
const unsigned short      element_node       = 1;
const unsigned short      attribute_node     = 2;
const unsigned short      text_node          = 3;
const unsigned short      cdata_section_node = 4;
const unsigned short      entity_reference_node = 5;
const unsigned short      entity_node        = 6;
const unsigned short      processing_instruction_node = 7;
const unsigned short      comment_node       = 8;
const unsigned short      document_node      = 9;
const unsigned short      document_type_node = 10;
const unsigned short      document_fragment_node = 11;
const unsigned short      notation_node      = 12;
...
}
其中最重要的两个节点为元素节点(1)和文本节点(3)。其余的很少会用到。
例如,列出所有的子元素节点时,我们可以遍历它,并使用childnodes[i].nodetype != 1来进行检测。
下面是实现代码:
复制代码 代码如下:
allowed readers:
john
 bob
*思考
下面这段代码将提示什么内容:
复制代码 代码如下:
nodename, tagname
nodename 和 tagname 都包含节点的名称。
对于document.body来说
alert( document.body.nodename )   // body
在html中所有的nodename会被大写。
当nodename没有被大写时
这种情况比较稀有,你如果好奇的话可以阅读以下。
你很可能已经知道,浏览器有两种方式进行解析:html模式和__xml模式。通常使用的是html模式,但是当使用xmlhttprequest__技术获取xml文档时,会使用xml模式。
在火狐浏览器中当xhtml文档的content-type设置为xmlish时也会使用xml模式。
在__xml模式中节点名将会保留,所以有可能出现body或body。
因此,如果通过xmlhttprequest__技术从服务器载入xml到html文档时,节点名称将会保留。
对于元素来说nodename和__tagname__是相同的。
但非元素节点也存在着nodename属性,在这些节点中它有特殊的值:
alert(document.nodename) // #document
大多数节点类型都没有tagname属性,并且在ie中注释节点的tagname为!。
因此,通常来讲nodename 跟 tagname 比起来更有意义一些。但tagname像是简化版本,因此,当你只处理元素节点时,你可以使用它。
innerhtml
innerhtml是html5标准的一部分,详细请看链接
它允许以文本的方式访问节点内容。下例将会输出document.body的所有的内容并且用新的内容进行替换。
复制代码 代码如下:
the paragraph
and a div
innerhtml会包含一个有效地html。但浏览器也可以解析畸形的html。
innerhtml可以在任意一个元素节点中进行使用。它非常非常有用。
innerhtml pitfalls
innerhtml不像看起来那么简单。它有一些陷阱在正等待着菜鸟们,甚至有些时候经验丰富的程序员也无法避免。
ie中__table__节点的innerhtml为只读的
ie中col, colgroup, frameset, head, html, style, table, tbody, tfoot, thead, title, tr等元素里innerhtml为只读的。
ie中的table标签中除了td其余的标签innerhtml都是只读的。
innerhtml不能追加
从语句的构成上来看innerhtml可以进行追加操作,比如:
chatdiv.innerhtml +=
hi !
chatdiv.innerhtml += how you doing?
但是实际上都做了些什么:1. 旧的内容被清空
2. 新的内容被解析,并插入了进去。内容没有被追加,它重新生成了。
    因此,所有的图片和其他的资源当进行+=操作后会重新载入,包括smile.gif。
    幸运的是,有其他的方式来更新内容,这种方式不使用innerhtml,因此没有上面提到的问题。
nodevalue
innerhtml只对元素节点有效。
对于其他类型的节点来说,他们使用nodevalue属性来获取内容。下例将说明它是如何在文本节点和注释节点工作的。
复制代码 代码如下:
the text
上面的例子中,有些警告为空的,那是因为空白节点的缘故。注意到对于script节点中nodevalue === null。那是因为script为元素节点。元素节点,要使用innerhtml。
总结
nodetype
  节点类型。最重要的是元素节点为1,文本节点为3,只读。
nodename/tagname
  大写的标签名。非元素节点来说nodename还会有特殊的值,只读。
innerhtml
  元素节点的内容,可写。
nodevalue
  文本节点的内容,可写。
dom节点根据类型,还有其他的一些属性。例如,input标签有value和__checked__属性。a属性有href等等。
以上就是本文的全部内容了,希望大家能够喜欢。
其它类似信息

推荐信息