#7动态创建标记

xiaoxiao2021-02-27  206



前面用的DOM方法都是对已经存在的元素做出修改 JavaScript也可以通过创建元素和修改现有的元素来改变网页结构 1.传统方法    document.write   和 innerHTML

  1)document.write document对象的write()方法-吧字符串插入到文档里。

<body> <script>    document.write("<h1>This is inserted.</h1>"); </script> </body>

example.js

 function insertParagraph(text){  var str = "<p>";  str += text;  str += "</p>";  document.write(str);  }

<body> <script src="script/example.js"></script> <script>    document.write("<p>This is inserted.</p>");    insertParagraph("This is inserted"); </script>

</body>

document.write缺点:违背了“行为应该与变现分离的原则”即使把document.write语句挪到外部函数里,还是需要在标记的<body>部分使用<scrip>标签才能调用那个函数。(但是实践发现可以只要不要在把语句放在链接.js文件的<script>语句里就行了) 应该尽可能的避免在<body>部分里用<scritp>便签,避免使用document.write方法

2.innerHTML属性 innerHTML属性可以用来读,写某给定元素里的HTML内容 标准化的DOM方法就像手术刀一样精细,innerHTML属性就像一把大锤那样粗放。  window.onload = function(){    var testdiv = document.getElementById("testdiv");    alert(testdiv.innerHTML);   }

<body> <div id="testdiv">    <p>This is <em>my</em> content.</p> </div> </body> 运行后可以看出innerHTML属性的作用,会替换或添加一段HTML内容

window.onload = function(){    var testdiv = document.getElementById("testdiv");    testdiv.innerHTML = "<p>I inserted <em>this</em> content.</p>"   }

@DOM方法

DOM是文档的显示。DOM所包含的信息与文档里的信息一一对应。我们要学会问使用正确的方法,就可以获取DOM节点书上任何一个节点的细节。 DOM是一条双向车道。不仅可以获取文档内容,还可以更新文档的内容。如果你改变了DOM节点树,文档在浏览器里呈现效果就会发生变化。(setAttribute方法可以改变DOM节点树上的某个属性节点,相关文档在浏览器里的呈现就会发生相应的变化,不过setAttribute方法为改变文档的物理内容。如果用文本编辑器而不用浏览器打开这个文档,看不到变化。这是因为浏览器时间显示的是那颗DOM节点树。在浏览器看来,DOM节点树才是文档。)

1)  createElement 方法 document.createElement(nodeName) 创建一个p元素 document.createElement("p"); 但是也只是创建了一个元素节点,并没有将其嵌入DOM节点树中。这种情况下称为文档碎片,还无法显示在浏览器的窗口画面里。  window.onload = function(){    var para = document.createElement("p");  var info = "nodeName: ";  info += para.nodeName;  info += " nodeType: ";  info += para.nodeType;  alert(info);    }

<body> <div id="testdiv"> </div> <script src="script/example.js"></script> </body> 证明新节点已经存在,并且有nodeName和nodeType属性

2).appendChild方法 把新创建的节点插入某个文档的节点树的最简单的方法是,让它成为这个文档某个现有节点的一个子节点。 语法: parent.appendChild(child) child就是刚才用createElement方法创建出来的。 想让创建出来的p元素成为testdiv元素的一个子节点: var para = document.createElement("p"); var testdiv = document.getElementById("testdiv"); testdiv.appendChild(para);

3).createTextNode方法 现在已经创建出了一个元素节点并把它插入了文档的节点树,这个节点是一个空白的p元素。你想把一些文本放进这个p元素内,可以用createTextNode方法来实现。 语法: document.createTextNode(text) 创建一个内容为helloworld的文本节点 document.createTextNode("hello world")

var text = document.createTextNode("hello world"); 现在这个文本节点还是一个文档碎片。让把他插入刚才创建的元素节点p里 para.appendChild(text);

最终的代码如下 1@.js文件  window.onload = function(){   var para = document.createElement("p");   var testdiv = document.getElementById("testdiv");   testdiv.appendChild(para);   var text = document.createTextNode("hello world");   para.appendChild(text); } 2@,html文件 <title>Test</title> <script src="script/example.js"></script> </head> <body> <div id="testdiv"> </div> </body> .js文件中创建的顺序可以改变     window.onload = function(){   var para = document.createElement("p");   var text = document.createTextNode("hello world");   para.appendChild(text);   var testdiv = document.getElementById("testdiv");   testdiv.appendChild(para); }

4).一个更复杂的组合 动态添加标记同上面的.js文件函数

3.重回图片库

 function preparePlaceholder(){                var placeholder = document.createElement("img" );    placeholder.setAttribute("id","placeholder");    placeholder.setAttribute("src","");    placeholder.setAttribute("alt","my image gallery");    document.getElementsByTagName("body")[0].appendChild("placeholder");    //可以用HTML-DOM提供的属性body    //document.body.appendChild(placeholder);    var description = document.createElement("p");    description.setAttribute("id","description");    var desctext = document.createTextNode("Choose an image");    description.appendChild("desctext");    document.getElementsByTagName("body")[0].appendChild(" description");       var gallery = document.getElementById("imagegallery");    gallery.parentNode.insertBefore("description","gallery");      }

@在已有元素前插入一个新元素 insertBefore()方法,这个方法将把一个新元素插入到一个现有元素的前面。在调用这个方式时,必须告诉它三件事: (1)新元素:你想插入的元素 (2)目标元素:你想把这个新元素插入到那个元素之前 (3)父元素:目标元素的父元素 语法: parentElement.insertBefore(newElement,targetElement) 因为目标元素的parentNode的属性值就是它

想让新创建的元素放到跟到图片清单后面(但是实际上并不是这样的) var gallery = document.getElementById("imagegallery"); gallery.parentNode.insertBefore("description","gallery");

@在已有元素后插入一个新元素 insertAfter()但是DOM并没有提供这个方法

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

 2.使用insertAfter函数        function preparePlaceholder(){//使用了新的DOM方法测试浏览器是否支持他们                 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","");    placeholder.setAttribute("alt","my image gallery");    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);   }

@4   Ajax 用于概括异步加载页面技术(不用加载整个页面)主要交互敏捷

转载请注明原文地址: https://www.6miu.com/read-9126.html

最新回复(0)