简介

attribute和property都有属性之意,但对于attribute和property的区分其实并不难。从对象来说,attribute是html文档上标签属性,

而property则是对应dom元素的自身属性。从操作方法上来看,attribute可以通过dom core规范的接口 getAttribute和setAttribute

进行获取修改,而property可以通过对象访问属性的方式 . 或者 ["  "]来修改获取。

但是对于ie6,7,8(Q)模式下,会与标准w3c浏览器发生兼容性问题:

  1,在ie6,7,8(Q)下,这两种方法等同,即getAttribute和". || [' ']"可以相互访问html上的标签属性或者dom对象的特有属性(典型:

  可通过getAttribute获取Dom元素的innerHTML和offsetWidth,clientWidth属性,也可通过setAttribute设置;对于w3c浏览器而言,

  它们按照规范在html文档上设置这样的自定义属性,并不修改dom元素的属性),而在w3c浏览器下可以正确区分他们的异同;

  2,在ie6,7,8(Q)下,通过getAttribute和setAttribute可以访问设置input类型为text,password,file的value属性,而w3c只有

  通过对象属性的形式才能设置获取;

  3,在ie6,7,8(Q)下,通过setAttribute无法正确设置“class”,即setAttribute(“class”,“show”)不成功,通过getAttribute(“class”)

  将是null,通过setter(getter)className兼容;

  4,在ie6,7,8(Q)下,通过setAttribute无法正确设置“style”,通过getAttribute(“style”)返回的将不是字符串(DOMString),而是

  CSSStyleDeclaration对象,通过setter(getter)style.cssText兼容;

  5,在ie6,7,8(Q)下,无法通过setAttribute设置事件处理程序,setAttribute(‘onclick’,function(){...})失效

   6,  IE系列下,IE6,7获取href或者src属性,使用getAttribute和dom对象属性访问结果相同,返回的都是绝对路径,而对于IE8及其以后的IE,

  使用getAttribute返回的是在html中的路径,而dom对象属性访问返回绝对路径。于IE6,7下的getAttribute方法,可以额外设置第二个参数,

  当参数为2时,返回相对URL,详情请看MSDN解释。另外,对于 <input type="text" readonly> 和

   <input type="text" readonly="readonly">  ,ie8下getAttribute(“readonly”)返回的是“readonly”,而IE67返回boolean。同理

  类似selected,checked,multiple。

  另外,IE67并没有实现hasAttribute方法,以此可以判断返回绝对路径:

  

function getScriptAbsoluteSrc(node) {
return node.hasAttribute ? // non-IE6/7
node.src :
// see http://msdn.microsoft.com/en-us/library/ms536429(VS.85).aspx
node.getAttribute("src", 4)
}

分析

  dom core规范指出,Element节点实现了getAttribute和setAttribute接口,但是对于具体的Dom元素而言,例如div,他实现了接口是

  HTMLDivElement,而HTMLDivElement接口继承自HTMLElement接口,HTMLElement又实现了Dom (HTML)规范(可看做是dom core扩展,

  针对HTML和XHTML的对象细节描述),Dom (HTML)规范指出了dom元素属性property和html标签属性的对应关系,他们分别是id,dir,lang,title

  ,className。特定的HTMLElement例如HTMLAElement也额外实现了href与html特性href的对应。当html特性是JS的保留字的情况下,会在特性名称

  前加上“html”,如label的label.htmlFor.在HTML解析阶段,浏览器会将html的上述标签属性绑定在相对应DOM元素的属性上,这样修改任意一个Dom元

  素的属性,都会在标签属性上得到呈现。

  

  而对于input(type=text|password|file)来说,其value值可以理解为两种,其一就是在input标签上显式设置的value属性,另一个就是通过

  输入而进行改变的currentValue。 DOM Level 2 HTML 规范中指出,当 INPUT 元素 type 属性为 "text"、"file" 或 "password" 时,其对应的

  HTMLInputElement 对象的 value 属性代表了这个控件 "currentValue",修改这个属性会改变控件的 "当前值",但是并不会改变其 HTML 标签上的 value 属性。

  根据 HTML4.01 规范中的描述,一个 INPUT 元素 HTML 标签上的 value 属性指定了这个控件的 "currentValue"。最初的 "当前值" 会采用 "初始值"。

html标签属性(attribute)和dom元素的属性(property)的更多相关文章

  1. event.target 属性返回哪个 DOM 元素触发了事件。

    <ul> <li>list <strong>item 1</strong></li> <li><span>list ...

  2. JavaScript Dom基础-9-Dom查找方法; 设置DOM元素的样式; innerHTML属性的应用; className属性的应用; DOM元素上添加删除获取属性;

    JavaScript Dom基础 学习目标 1.掌握基本的Dom查找方法 domcument.getElementById() Domcument.getElementBy TagName() 2.掌 ...

  3. jQuery 数据 DOM 元素 核心 属性

    jQuery 参考手册 - 数据 .clearQueue() 从序列中删除仍未运行的所有项目 .clearQueue(queueName) $("div").clearQueue( ...

  4. Vue获取DOM元素的属性值

    项目中需要做一个小弹层,如下图: 我需要知道点击元素距离顶部的值,再计算弹层的top值,如下图: 在vue中如何获取到DOM元素距离窗口顶部的值呢? 1.通过$event获取 html: <di ...

  5. jQuery -&gt; 获取/设置/删除DOM元素的属性

    jQuery的属性操作很easy,以下以一个a元素来说明属性的获取/设置/删除操作 <body> <a>jquery.com</a> </body> 加 ...

  6. 详解JS中DOM 元素的 attribute 和 property 属性

    一.'表亲戚':attribute和property 为什么称attribute和property为'表亲戚'呢?因为他们既有共同处,也有不同点. attribute 是 dom 元素在文档中作为 h ...

  7. 一个DOM元素同时拥有多个类名时的样式产生冲突时 属性取决于css样式表中后读取到的属性

    如果一个DOM元素包含多个类名,其中的两个类名的属性产生冲突,并不是根据htnl中类名的顺序来决定DOM元素的属性, 而是根据css样式中的顺序来决定DOM元素的属性,它取决于css样式表中后读取到的 ...

  8. DOM元素属性值如果设置为对象

    结论:内部会调用toString方法,将设置的对象转换为字符串添加给相应的属性: 这个问题呢,是通过jQuery的each方法中,回调函数的this指向问题而来: 我们知道,回调函数中的this如果指 ...

  9. JS DOM元素的操作(创建,添加,删除,和修改属性)

    1.1 创建 DOM 元素以及相应的追加方式 1.1.1  创建:document.createElement('div'); 添加: fatherEle.appendChild(ele); appe ...

随机推荐

  1. indexOf、instanceOf、typeOf、valueOf详解

    1.indexOf() 该方法用来返回某个指定的字符串值在字符串中首次出现的位置. 语法:indexOf(searchvalue,fromindex);两个参数,参数一表示查询的字符串值,参数二可选表 ...

  2. Ubuntu14.04或16.04下安装JDK1.8+Scala+Hadoop2.7.3+Spark2.0.2

    为了将Hadoop和Spark的安装简单化,今日写下此帖. 首先,要看手头有多少机器,要安装伪分布式的Hadoop+Spark还是完全分布式的,这里分别记录. 1. 伪分布式安装 伪分布式的Hadoo ...

  3. java并发编程(十九)障碍器CyclicBarrier

    转载请注明出处:http://blog.csdn.net/ns_code/article/details/17512983 CyclicBarrier(又叫障碍器)同样是Java 5中加入的新特性,使 ...

  4. JavaScript鼠标经过图片的放大镜效果

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  5. 代码自定义双色title的按钮

    所图所示,通过代码自定义这样的按钮. .h文件 // // CustomButtom.h // testPlus // // Created by 鹰眼 on 14/10/20. // Copyrig ...

  6. 免费开源分布式系统日志收集框架 Exceptionless

    前言 从去年就答应过Eric(Exceptionless的作者之一),在中国会帮助给 Exceptionless 做推广,但是由于各种原因一直没有做这件事情,在此对Eric表示歉意.:) Except ...

  7. Reactive Extensions介绍

    Reactive Extensions(Rx)是对LINQ的一种扩展,他的目标是对异步的集合进行操作,也就是说,集合中的元素是异步填充的,比如说从Web或者云端获取数据然后对集合进行填充.Rx起源于M ...

  8. Hadoop学习笔记—13.分布式集群中节点的动态添加与下架

    开篇:在本笔记系列的第一篇中,我们介绍了如何搭建伪分布与分布模式的Hadoop集群.现在,我们来了解一下在一个Hadoop分布式集群中,如何动态(不关机且正在运行的情况下)地添加一个Hadoop节点与 ...

  9. 1ms引发的问题

    最近在跟SQLServer数据库进行交互的时候发现一个奇怪的问题,在往数据库里边插入日期型数据的时候,在C#里面赋值的为 2014/05/19 23:59:59,但是存到数据库里边就变成了2014/0 ...

  10. 编译Android AOSP代码

    下载完了源代码,终于到了编译的阶段了.这个阶段远比你想象的简单,一个make命令就可以完成源代码的编译了.参照下面的教程你就可以编译出适用于Android源代码树上的所有分支,包括master.基本的 ...