前端学习开发实例 标签页的动态增删改(Javascript + Bootstrap)

参考文档:JavaScript 教程 W3school

参考视频:【极客学院】一周学会Bootstrap

官方文档: Bootstrap 中文文档 · Bootstrap 是世界上最流行的、移动设备优先的、响应式前端开发框架。


文章目录

  • 功能需求
  • 结果展示
  • 源代码
    • 文件目录
    • index.html
    • mycss.css
    • myjs.js



功能需求

实现动态标签页,包含一系列按钮和文本。
切换功能:点击按钮可以切换到相应文本。(使用bootstrap的js标签页)
添加功能:可以动态添加新的按钮和文本。(使用按钮监听器,DOM添加节点和属性)
删除功能:可以删除指定按钮和对应文本。(使用按钮onclick属性,DOM删除节点)
编辑功能:可以编辑按钮和文本内容。(使用HTML5的contenteditable属性)



结果展示

初始状态:
前端学习开发实例 标签页的动态增删改(Javascript + Bootstrap)_第1张图片
切换功能(点击按钮):
前端学习开发实例 标签页的动态增删改(Javascript + Bootstrap)_第2张图片

可编辑功能(点击编辑):
前端学习开发实例 标签页的动态增删改(Javascript + Bootstrap)_第3张图片
添加功能(单击最右侧Add按钮):
前端学习开发实例 标签页的动态增删改(Javascript + Bootstrap)_第4张图片
前端学习开发实例 标签页的动态增删改(Javascript + Bootstrap)_第5张图片
删除功能(单击S3右侧的关闭按钮):
前端学习开发实例 标签页的动态增删改(Javascript + Bootstrap)_第6张图片



源代码


文件目录

  • 根目录
  1. index.html 网页源代码
  2. mycss.css 样式源代码
  3. myjs.js 脚本源代码
  • 文件夹
  1. css/
    bootstrap.css bootstrap样式
  2. js/
    bootstrap.js bootstrap脚本
    jquery-3.5.1.js bootstrap依赖库

index.html

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <title>Title</title>
  <!--引入bootstrap中的css样式和js脚本,以及js依赖的jquery-->
  <link rel="stylesheet" href="css/bootstrap.css">
  <script src="js/jquery-3.5.1.js"></script>
  <script src="js/bootstrap.js"></script>
  <!--引入css-->
  <link rel="stylesheet" type="text/css" href="mycss.css">
</head>

<body>


<div class="container mid">

  <!-- Nav tabs -->
  <ul class="nav nav-tabs nav-pills xx" role="tablist" id="u1">
    <button type="button" class="btn-toolbar btn-lg" data-dismiss="alert" id="b1">
      <span aria-hidden="true" class="glyphicon glyphicon-plus">
      </span>Add
    </button>
    <li role="presentation" id="l1" class="active">
      <a href="#text1" aria-controls="text1" role="tab" data-toggle="tab" contenteditable="True">
        S1
        <button type="button" class="close" onclick="buttonRemove(1)">
          <span aria-hidden="true">&times;</span>
        </button>
      </a>
    </li>
    <li role="presentation" id="l2">
      <a href="#text2" aria-controls="text2" role="tab" data-toggle="tab" contenteditable="True">
        S2
        <button type="button" class="close" onclick="buttonRemove(2)">
          <span aria-hidden="true">&times;</span>
        </button>
      </a>
    </li>
    <li role="presentation" id="l3">
      <a href="#text3" aria-controls="text3" role="tab" data-toggle="tab" contenteditable="True">
        S3
        <button type="button" class="close" onclick="buttonRemove(3)">
          <span aria-hidden="true">&times;</span>
        </button>
      </a>
    </li>
  </ul>

  <!-- Tab panes -->
  <div class="tab-content" id="div1">
    <div role="tabpanel" class="tab-pane active" id="text1" contenteditable="True">1页文本</div>
    <div role="tabpanel" class="tab-pane" id="text2" contenteditable="True">2页文本</div>
    <div role="tabpanel" class="tab-pane" id="text3" contenteditable="True">3页文本</div>

  </div>

</div>

<!--添加js脚本-->
<script src="myjs.js"></script>

</body>

</html>


mycss.css

.mid{ /*位于页面中央*/
  position: absolute;
  height: 150px;
  width: 500px;
  padding: 0px;
  border: 10px;
  border-color: #b3d4fc;
  border-style: groove;
  border-radius: 10px;
  margin-top: 100px;
  margin-left: 400px;
}
#b1{ /*按钮样式*/
  float: right;
  border: 5px;
}
#b1:hover{ /*按钮悬停样式*/
  background-color: #888888;
}

myjs.js


  //temp记录当前是第几个页面
  var temp = 3;


  //DOM获取添加按钮
  var buttonAdd = document.getElementById("b1");
  //为添加功能设置监听器
  buttonAdd.addEventListener("click", function () {
    temp++;
    buttonAddTab(); //添加按钮
    buttonAddText(); //添加文本
  })

  //添加标签页上半部分按钮
  function buttonAddTab(){
    var newli = document.createElement("li");
    /*添加属性尽量使用setAttribute,使用(对象.属性)或对象['属性']有时会不正确*/
    newli.setAttribute("role", "presentation");
    newli.setAttribute("id", "l" + temp);

    var newa = document.createElement("a");

    newa.setAttribute("href","#text" + temp);
    newa.setAttribute("aria-controls", "text" + temp);
    newa.setAttribute("role", "tab");
    newa.setAttribute("data-toggle", "tab");
    newa.setAttribute("contenteditable", "True");

    var text = document.createTextNode("S" + temp);

    var newbutton = document.createElement("button");
    newbutton.setAttribute("type", "button");
    newbutton.setAttribute("class", "close");
    newbutton.setAttribute("onclick", "buttonRemove(" + temp + ")");

    var newspan = document.createElement("span");
    newspan.setAttribute("aria-hidden", "true");

    /*添加实体尽量使用innerHTML,使用createTextNode有时会不正确*/
    newspan.innerHTML = "×";


    newbutton.append(newspan);
    newa.appendChild(text);
    newa.appendChild(newbutton);
    newli.appendChild(newa);


    var element = document.getElementById("u1");
    element.appendChild(newli);
  }

  //添加标签页下半部分文本
  function buttonAddText(){
    var newdiv = document.createElement("div");
    newdiv.setAttribute("role","tabpanel");
    newdiv.setAttribute("class", "tab-pane");
    newdiv.setAttribute("id","text" + temp);
    newdiv.setAttribute("contenteditable", "True");

    var text2 = "第" + temp + "页文本";
    newdiv.innerHTML = text2;

    var element2 = document.getElementById("div1");
    element2.appendChild(newdiv);
  }


  //删除按钮调用函数,参数id
  function buttonRemove(num){
    //temp--;
    buttonRemoveTab("l" + num); //删除按钮
    buttonRemoveText("text" + num); //删除文本
  }

  //删除标签页上半部分按钮
  function buttonRemoveTab(id) {
    var t1 = document.getElementById(id);
    /*通过id删除元素,需通过父节点的删除子节点方法*/
    t1.parentNode.removeChild(t1);
  }

  //删除标签页下半部分文本
  function buttonRemoveText(id) {
    var t2 = document.getElementById(id);
    t2.parentNode.removeChild(t2);
  }

你可能感兴趣的:(前端学习开发实例,javascript)