1. HTML元素

所有 HTML 元素都通过 HTMLElement 类型表示,包括其直接实例和间接实例。另外,HTMLElement直接继承 Element 并增加了一些属性。每个属性都对应下列属性之一,它们是所有 HTML 元素上都有的标准属性:

  • id,元素在文档中的唯一标识符;
  • title,包含元素的额外信息,通常以提示条形式展示;
  • lang,元素内容的语言代码(很少用);
  • dir,语言的书写方向(”ltr”表示从左到右,”rtl”表示从右到左,同样很少用);
  • className,相当于 class 属性,用于指定元素的 CSS 类(因为 class 是 ECMAScript 关键字,所以不能直接用这个名字)。

所有这些都可以用来获取对应的属性值,也可以用来修改相应的值。


  1. <div id="myDiv" class="bd" title="Body text" lang="en" dir="ltr"></div>

这个元素中的所有属性都可以使用下列 JavaScript 代码读取:

  1. let div = document.getElementById("myDiv");
  2. alert(div.id); // "myDiv"
  3. alert(div.className); // "bd"
  4. alert(div.title); // "Body text"
  5. alert(div.lang); // "en"
  6. alert(div.dir); // "ltr"

而且,可以使用下列代码修改元素的属性

  1. div.id = "someOtherId";
  2. div.className = "ft";
  3. div.title = "Some other text";
  4. div.lang = "fr";
  5. div.dir ="rtl";
  • 并非所有这些属性的修改都会对页面产生影响。比如,把 id 或 lang 改成其他值对用户是不可见的(假设没有基于这两个属性应用 CSS 样式),而修改 title 属性则只会在鼠标移到这个元素上时才会反映出来。
  • 修改 dir 会导致页面文本立即向左或向右对齐。
  • 修改 className 会立即反映应用到新类名的 CSS 样式(如果定义了不同的样式)。

2. 取得属性

  • 每个元素都有零个或多个属性,通常用于为元素或其内容附加更多信息。
  • 与属性相关的 DOM 方法主要有 3 个:getAttribute()setAttribute()removeAttribute()
  • 这些方法主要用于操纵属性,包括在 HTMLElement 类型上定义的属性。

1550915376339.png

  1. <div id="demo" index="1" class="nav"></div>
  2. <script>
  3. var div = document.querySelector('div');
  4. // 1. 获取元素的属性值
  5. // (1) element.属性
  6. console.log(div.id);
  7. //(2) element.getAttribute('属性') get得到获取 attribute 属性的意思
  8. //我们程序员自己添加的属性我们称为自定义属性 index
  9. console.log(div.getAttribute('id'));
  10. console.log(div.getAttribute('index'));
  11. </script>
  1. let div = document.getElementById("myDiv");
  2. alert(div.getAttribute("id")); // "myDiv"
  3. alert(div.getAttribute("class")); // "bd"
  4. alert(div.getAttribute("title")); // "Body text"
  5. alert(div.getAttribute("lang")); // "en"
  6. alert(div.getAttribute("dir")); // "ltr"
  • 注意传给 getAttribute()的属性名与它们实际的属性名是一样的,
  • 因此这要传”class”而非”className”(className 是作为对象属性时才那么拼写的)。
  • 如果给定的属性不存在,则 getAttribute()返回 null。

getAttribute()方法也能取得不是 HTML 语言正式属性的自定义属性的值:

  1. <div id="myDiv" my_special_attribute="hello!"></div>

这个元素有一个自定义属性``my_special_attribute,值为”hello!”。可以像其他属性一样使用getAttribute()取得这个属性的值:

  1. let value = div.getAttribute("my_special_attribute");

注意: 属性名不区分大小写,因此”ID”和”id”被认为是同一个属性。另外,根据 HTML5 规范的
要求,自定义属性名应该前缀 data-以方便验证。


3. 设置属性

  • getAttribute()配套的方法是 setAttribute()
  • 这个方法接收两个参数:
    • 要设置的属性名和属性的值。如果属性已经存在,则 setAttribute()会以指定的值替换原来的值;
    • 如果属性不存在,则setAttribute()会以指定的值创建该属性。

1550915445026.png

  1. div.setAttribute("id", "someOtherId");
  2. div.setAttribute("class", "ft");
  3. div.setAttribute("title", "Some other text");
  4. div.setAttribute("lang","fr");
  5. div.setAttribute("dir", "rtl");
  • setAttribute()适用于 HTML 属性,也适用于自定义属性。另外,使用 setAttribute()方法设置的属性名会规范为小写形式,因此”ID”会变成”id”。
  • 因为元素属性也是 DOM 对象属性,所以直接给 DOM 对象的属性赋值也可以设置元素属性的值
    1. div.id = "someOtherId";
    2. div.align = "left"; //改变元素属性的值

注意: 在 DOM 对象上添加自定义属性,如下面的例子所示,不会自动让它变成元素的属性:

  1. div.mycolor = "red";
  2. alert(div.getAttribute("mycolor")); // null(IE 除外)
  • 这个例子添加了一个自定义属性 mycolor 并将其值设置为”red”。在多数浏览器中,这个属性不会自动变成元素属性。
  • 因此调用 getAttribute()取得 mycolor 的值会返回 null。

4. 删除属性

1550915513137.png
removeAttribute()用于从元素中删除属性。这样不单单是清除属性的值,而是会把整个属性完全从元素中去掉

  1. div.removeAttribute("class");

这个方法用得并不多,但在序列化 DOM 元素时可以通过它控制要包含的属性。


5. 自定义数据属性

  • HTML5 允许给元素指定非标准的属性,但要使用前缀 data-以便告诉浏览器,
  • 这些属性既不包含与渲染有关的信息,也不包含元素的语义信息。
  • 除了前缀(建议是data开头),自定义属性对命名是没有限制的,data-后面跟什么都可以。

1550915798516.png
1550915815571.png
操作自定义属性:

  1. //设置
  2. element.setAttribute(属性名,属性值) // 这种方式设置的自定义属性会被解析到html中
  3. element.自定义属性名 = 自定义属性值 // 不会被解析到html
  4. //获取
  5. element.getAttribute(属性名) //获取通过setAttribute方式设置的自定义属性
  6. element.属性名 //获取内置属性或通过 .或[]方式设置的自定义属性
  7. //删除自定义属性
  8. element.removeAttribute(属性名)
  9. //H5新增特性 自定义属性 要求用data-开头,对于此类自定义属性可通过dataset属性获取
  10. element.dataset.test = 'hello' //设置了data-test属性,会显示在结构中 支持ie11及以上
  11. element.setAttribute('data-test','hello') //也设置了data-test属性,无兼容性问题
  12. console.log(element.dataset.test) //获取data-set属性
  13. console.log(element.getAttribute('data-test')) //传统方式获取data-set属性

6.创建元素

可以使用 document.createElement()方法创建新元素。这个方法接收一个参数,即要创建元素的标签名。在 HTML 文档中,标签名是不区分大小写的,而 XML 文档(包括 XHTML)是区分大小写的。

要创建

元素,可以使用下面的代码:

  1. //创建元素 document.createElement(标签名)
  2. //将元素o1插入元素o2内部 o2.appendChild(o1) 或 o2.insertBefore(o1,已存在的o1的子元素)
  3. //先创建
  4. var div = document.createElement('div')
  5. //再插入页面
  6. document.body.appendChild(div) //追加到最末尾
  7. document.body.insertBefore(div,document.body.children[0]) //插入到最前面

使用 createElement()方法创建新元素的同时也会将其 ownerDocument 属性设置为 document。此时,可以再为其添加属性、添加更多子元素。比如:

  1. div.id = "myNewDiv";
  2. div.className = "box";
  • 在新元素上设置这些属性只会附加信息。因为这个元素还没有添加到文档树,所以不会影响浏览器显示。
  • 要把元素添加到文档树,可以使用 appendChild()insertBefore()replaceChild()

比如,以下代码会把刚才创建的元素添加到文档的元素中:

  1. document.body.appendChild(div);

元素被添加到文档树之后,浏览器会立即将其渲染出来。之后再对这个元素所做的任何修改,都会立即在浏览器中反映出来。