js元素节点之其他节点

知识点:
1. 父节点 : parentNodeoffsetParent
2. 兄弟节点:ElementSiblingSibling;
3. 创建节点:
createDocumentFragment() //创建一个DOM片段;
createElement() //创建一个具体的元素;
createTextNode() //创建一个文本节点;
4. 添加、移除、替换、插入节点:
appendChild()
removeChild()
replaceChild()
insertBefore()
5 阻止a链接默认跳转:
点击事件里面添加 return false;
在href属性里面添加 javascript:0;
首先建一个html文件:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8" />
  <title>Document</title>
</head>
<body>
<!-- 父节点 -->
  <div id="box1">
    <div id="box2"></div>
  </div>
  <!-- 兄弟节点  -->
  <ul id="list">
    <li>hello1</li>
    <li>hello2</li>
    <li>hello3</li>
  </ul>
  <!-- 创建节点 -->
  <input type="" name="" id="inpt">
  <button id="btn">new</button>
  <ul id="list">
    <li>hello</li>
    <li>hello</li>
<!-- 删除节点 -->
  <ul>
    <li>what<a href="javascript:0">del1</a></li>
    <li>what<a href="javascript:0">del2</a></li>
    <li>what<a href="javascript:0">del3</a></li>
  </ul>
</body>
</html>

父节点:
函数实现效果:直接弹出box2 的父元素;
函数的思路:

  1. 获取box2的dom节点;
  2. 直接用parentNode和offsetParent两个函数弹出其父元素,查看结果;
  3. 区分两种不同方式的区别;
   <script>
      window.onload=function(){
        var obox2=document.getElementById('box2');
        alert(obox2.parentNode);
        alert(obox2.offsetParent);
      }
  </script>

这里会弹出两种结果第一个是[object HTMLDivElement],另一个是[object HTMLBodyElement],parentNode是寻找其父元素,
offsetParent是寻找全局的父元素body,如果想让offsetParent获得其父元素需要给其父元素添加定位。

#box1{
      height: 200px;
      width: 200px;
      background: blue;
      position:absolute;
    }

这样弹出的两个都是[object HTMLDivElement];

兄弟节点:
函数实现效果:点击ul 中的li标签获取其兄弟元素的内容innerText;
函数的思路:

  1. 首先获取li标签的dom节点;
  2. 选择ul中所有的li 标签;
  3. 点击所选中的li标签的事件;
  4. 查看点击效果;
  5. 注意事项;
<script>
  window.onload=function(){
     var ali=document.getElementsByTagName('li');
     for (var i=0; i <ali.length; i++) {
      ali[i].onclick=function(){
        if (this.nextElementSibling) {
          alert(this.nextElementSibling.innerText);
        }else{
          alert(this.nextSibling.innerText);
        }
      }
    }
  }
</script>

注: 这里需要注意的是nextElementSibling和nextSibling的兼容问题,nextElementSibling一般是在google浏览器中运用,在ie中其中有一个版本不兼容这边需要用nextSibling;所以这里需要做下判断。

 if (this.nextElementSibling) {
          alert(this.nextElementSibling.innerText);
        }else{
          alert(this.nextSibling.innerText);
         }

创建节点:
函数实现的效果:点击new按钮将出入input的内容添加到ul的li标签中去;
函数思路:
1 首先获取button、input、ul、li的dom节点;

    var oul=document.getElementById('list');
    var ali=oul.getElementsByTagName('li');
    var obtn=document.getElementById('btn');
    var oinpt=document.getElementById('inpt');

2 点击事件;
3 在点击事件里面 ,新建一个li标签,

    var oli=document.createElement('li')

4 将input里面输入的内容赋值给新建的li元素里面
oli.innerText=oinpt.value;
5将新建的li元素添加到ul里面

    oul.appendChild(oli);

注意 这里我们需要的效果是将新加的元素和其内容添加到元素的前面,所以要有用到insertBefore(newChild, refChild)函数,这里需要注意的是如果原有的父元素是有子元素时insertBefore(newChild, refChild)是可以用的,但是有一种特殊的情况是如果原有的父元素没有子元素这样insertBefore(newChild, refChild)是不可以用的,所以这里需要一个判断 ,

<script>
  window.onload=function(){
    var oul=document.getElementById('list');
    var ali=oul.getElementsByTagName('li');
    var obtn=document.getElementById('btn');
    var oinpt=document.getElementById('inpt');
    obtn.onclick=function(){
        var oli=document.createElement('li')
          oli.innerText=oinpt.value;
          oinpt.value="";
        if (ali.length>0) {
          oul.insertBefore(oli, ali[0])
        }else{  
          oul.appendChild(oli);
        }
      }
    }
</script>

删除节点:
函数实现效果: 点击a标签删除自身和其父元素,
函数思路:
1.首先获取a标签和ul标签的dom节点;
2.点击事件;
3.ul 移除其子元素;
4. 应该注意的事项a标签的默认跳转问题;

<script>
  window.onload=function(){
    var oul=document.getElementsByTagName('ul')[0];
    var oa=document.getElementsByTagName('a');
  for (var i = 0; i < oa.length; i++) {
     oa[i].onclick=function(){
       oul.removeChild(this.parentNode);
       return false;
      }
    }
  }
</script>

注: 这里需要注意的一个问题是点击a链接的默认跳转的问题,现在想要的效果是点击a链接删除ul的子元素,所以要阻止a链接默认跳转的问题,一是:在点击事件里加return false 二是在a标签的href属性里添加javascript:0;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值