节点的属性

1.offsetTop

这个属性是只读的,无法通过改变这个属性来设定元素的位置。但是style.top可以通过设定来修改元素位置.
返回值:

  1. 该元素是body或者没有相关联的布局盒子,返回0
  2. 返回该元素的边框顶端的纵坐标,减去该元素的 offsetParent 的内边距顶端的纵坐标,得到的值。//其实就是该元素的top的值
  3. 如果offsetParent为空,则返回与body计算得出的值。

2.offsetLeft

返回值:

  1. 该元素是body或者没有相关联的布局盒子,返回0
  2. 返回该元素的边框左侧横坐标,减去该元素的 offsetParent 的内边距左侧横坐标,得到的值。 //该元素的left的值
  3. 如果offsetParent为空,则返回与body计算得出的值。

这两个属性,是根据距离最近的非静态定位祖先元素(offsetParent)进行定位

3.offsetWidth

(包含border外边缘以内的所有内容的宽度,即包含border和padding的宽高)

  1. 该元素没有相关联的布局盒子,返回0
  2. 返回该元素的边框边缘宽度

    4.offsetHeight

  3. 该元素没有相关联的布局盒子,返回0

  4. 返回该元素的边框边缘高度
    1. var div = document.querySelector('div');
    2. alert(div.offsetLeft); //返回的是一个数字、只能取得,不能改变
    3. alert(div.offsetTop); //返回的是一个数字、只能取得,不能改变
    4. alert(div.offsetWidth);
    5. alert(div.offsetHeight);

5.attributes:取得当前元素的所有属性

//不怎么经常用

  1. <div attr1="val1" attr2="val2" attr3="val3" attr4="val4" attr5="val5"></div>
  2. var div = document.querySelector('div');
  3. var attrs = div.attributes;
  4. for(vari=0; i<attrs.length; i++) {
  5. // attrs[i] //属性节点
  6. console.log(attrs[i].nodeType); //2
  7. console.log(attrs[i].nodeName); //attr1
  8. console.log(attrs[i].nodeValue); //val1
  9. console.log(attrs[i]); //attr1="val1"
  10. }
  11. attrs['attr1']; //节点,节点.nodeValue===>val1

节点的访问

//已知一个节点对它的家族进行访问

1.取其父元素节点:parentNode

  1. <div>
  2. <ul>
  3. <li>0</li>
  4. <li>1</li>
  5. <li>2</li>
  6. </ul>
  7. <p class="p">p1</p>
  8. <p>p2</p>
  9. </div>
  10. <script>
  11. var p1 = document.querySelector('p');
  12. console.log(p1.parentNode); //DIV
  13. </script>

2.取前一个兄弟节点:previousSibling

包含文本节点(即换行)
取前一个兄弟元素节点 :previousElementSibling

  1. var li2 = document.querySelector('div ul li:nth-of-type(2)')
  2. console.log(li2.previousElementSibling.innerHTML) //0

3.取下一个兄弟节点:nextSibling

包含文本节点(即换行)
取下一个兄弟元素节点:nextElementSibling

  1. console.log(p1.nextElementSibling.innerHTML); //p2

4.取其下一代(儿子)节点:childNodes

儿子元素节点: children //返回值是一个伪数组

  1. var a = document.querySelector('ul').children
  2. console.log(a[0].innerHTML); // 0

5.特殊节点

  1. var div = document.getElementById(‘test’)

祖宗:div.ownerDocument
大儿子:div.firstChild(包含空文本节点)
小儿子:div.lastChild(包含空文本节点)

节点的操作

//这里的操作可理解为已知一个元素节点。根据家族进行操作

1.创建元素节点

创建元素节点 document.createElement(tagName)
功能:创建一个元素节点
参数:字符串,节点的类型。例如:’div’、’span’、’td’
返回值:新创建的元素节点

  1. var div = document.createElement('div');

创建文本节点 document.createTextNode(str)
功能:创建一个文本节点
参数:节点的文本内容。
返回值:新创建的文本节点

  1. var textNode = document.createTextNode('hello world');

//此时节点并没有在DOM树上,只是在内存中

2.插入节点

挂DOM树上: 父节点.appendChild(创建的节点)

  1. //创建的节点放在该父节点最下面
  2. var adddiv = document.createElement('div');
  3. adddiv.innerHTML = '新节点';
  4. adddiv.background ='red';
  5. document.getElementsByClassName('p')[0].appendChild(adddiv);
  6. // document.getElementsByClassName('p')[0],创建的节点放在该节点的最下面;
  7. // 在className为p的节点最后加了一个div

父节点.insertBefore(创建的新节点, 被插入节点)

  1. var addli = document.createElement('li');
  2. addli.innerHTML = '新加的li';
  3. li2.parentNode.insertBefore(addli,li2)

3.删除节点: 父节点.removeChild(删除的节点)

  1. var lastli = document.querySelector('div ul li:last-of-type')
  2. document.querySelector('ul').removeChild(lastli)

4.克隆节点: 被复制节点.cloneNode(是否复制子节点)

  1. var newNode = addli.cloneNode(true); //false不复制子节点
  2. addli.parentNode.appendChild(newNode)