程式学徒

《JavaScript DOM编程艺术》11:动态创建标记

2018-10-03  本文已影响1人  ZackLive

这是《JavaScript学徒》系列的第十一课,今天会进入《JavaScript DOM编程艺术》第7章,我们会一起学习如何用JavaScript动态创建标记。动态的意思是,在程式运行中创建标记,而不是在运行前就已经写好在index.html里面。之前,我们学习的是如何用JavaScript操作那些已经写好在index.html中的标记,现在我们要用JavaScript直接创建标记。

本文同步发表于我的个人网站:

https://zacklive.com/javascript-dom-create-element/

教学视频连结

YouTube

微博

传统方法

传统方法方法不建议使用,只需大概了解一下,以便遇到时,知道是做什么的。

document.write

document.write("<p>This is inserted.</p>")

innerHTML

innerHTML既可以读取,也可以写入(赋值),但只能取得整体,不能取得里面的标记。

window.onload = function() {  var testdiv = document.getElementById("testdiv");  testdiv.innerHTML = "

I inserted this content.

";  alert(testdiv.innerHTML);}

DOM方法

createElement

var para = document.createElement("p");alert(para.nodeName + ", " + para.nodeType);

appendChild

var testdiv = document.getElementById("testdiv");var para = document.createElement("p");testdiv.appendChild(para);

CreateTextNode

var txt = document.createTextNode("Hello world");para.appendChild(txt);

insertBefore

var gallery = document.getElementById("iamgegallery");gallery.parentNode.insertBefore(placeholder, gallery);

要插入到gallery前面,那便是在其父元素底下进行。

insertAfter

JavaScript不提供,自己写:

function insertAfter(newElement, targetElement) {  var parent = targetElement.parentNode;  if (parent.lastChild == targetElement) {    parent.appendChild(newElement);  } else {    parent.insertBefore(newElement, targetElement.nextSibling);  }}

修改图片库例子

function addLoadEvent(func) {  var oldonload = window.onload;  if (typeof window.onload != 'function') {    window.onload = func;  } else {    window.onload = function() {      oldonload();      func();    }  }}function insertAfter(newElement, targetElement) {  var parent = targetElement.parentNode;  if (parent.lastChild == targetElement) {    parent.appendChild(newElement);  } else {    parent.insertBefore(newElement, targetElement.nextSibling);  }}function preparePlaceholder() {  if (!document.createElement) return false;  if (!document.createTextNode) return false;  if (!document.getElementById) return false;  if (!document.getElementById("imagegallery")) return false;  var placeholder = document.createElement("img");  placeholder.setAttribute("id", "placeholder");  placeholder.setAttribute("src", "https://via.placeholder.com/500x333");  placeholder.setAttribute("alt", "description");  var description = document.createElement("p");  description.setAttribute("id", "description");  var desctext = document.createTextNode("Choose an image");  description.appendChild(desctext);  var gallery = document.getElementById("imagegallery");  insertAfter(placeholder, gallery);  insertAfter(description, placeholder);}function prepareGallery() {  if (!document.getElementsByTagName ||      !document.getElementById ||      !document.getElementById("imagegallery")) return false;  var gallery = document.getElementById("imagegallery");  var links = gallery.getElementsByTagName("a");  for ( var i=0; i

上一篇下一篇

猜你喜欢

热点阅读