[TOC]javascript
document对象的write方法能够方便便捷地把字符串插入文档 最大的缺点是违背了“行为与表现分离”的原则 容易致使验证错误 避免使用document.write方法css
如今包含到HTML5规范中,innerHTML毫无细节而言 DOM像手术刀,innerHTML像大锤 须要把一大段HTML内容插入网页,innerHTML属性更加使用。支持读取和写入 innerHTML属性比document.write更加值得推荐,它是HTML的专有属性,没法用于其余任何标记语言html
动态方法建立标记:你不是在建立标记,而是在改变节点树java
语法以下node
document.creatElement(nodeName)
建立的元素已经存在,只是否是任何DOM节点树的组成部分,游荡在javascript世界的孤儿,称之为文档碎片浏览器
让建立的元素成为父节点的子节点 语法以下服务器
parent.appendChild(child)
例app
var para = document.creatElement("p"); var testdiv = getElementById("testdiv"); testdiv.appendChild(para);
等同于以下代码异步
document.getElementById("testdiv").appendChild(document.creatElement("p"));
语法以下函数
document.creatTextNode(text);
例
window.onload = function(){ var para = document.creatElement("p"); var txt = document.creatTextNode("Hello world"); para.appendChild(txt); var testdiv = getElementById("testdiv"); testdiv.appendChild(para); }
有一个图片和一段文字仅仅是为了showPic脚本服务的。既然这些元素存在是为了DOM服务的,用DOM的方法建立是最合适的选择
var placeholder = document.creatElement("img"); placeholder.setAttribute(id", "placeholder"); placeholder.setAttribute("src", "image/placeholder.gif"); placeholder.setAttribute("alt", "my image gallery"); var description = document.creatElement("p"); description.setAttribute("id", "description") var desctext = document.creatTextNode("Choose an image"); description.appendChild(desctext);
插入文档,很凑巧图片清单恰好是文档最后一个元素
document.getElementByTagName("body")[0].appendChild(placeholder); document.getElementByTagName("body")[0].appendChild(description);
insertBefore()方法
调用语法
parentElement.insertBefore(newElement, targetElement);
在使用中咱们没必要知道他的父元素是睡,由于targetElement的parentNode属性值就是
var gallery = document.getElementById("imagegallery"); gallery.parentNode.insertBefore(placeholder, gallery);
3.2 在已有元素后插入一个元素 insertAfter()方法 DOM自己并无提供insertAfter方法,咱们能够用已知DOM方法和属性编写方法
function insertAfter(newElement, targetElement){ var parent = targetElement.parentNoder; if (parent.lastChilde == targetName){ parent.appendChilde(newElement); }else { parent.insertBefore(newElement,targetname.nextSibling); } }
最终javascript和html
function showPic(whichpic) { if (!document.getElementById("placeholder")) return true; var source = whichpic.getAttribute("href"); var placeholder = document.getElementById("placeholder"); placeholder.setAttribute("src",source); if (!document.getElementById("description")) return false; if (whichpic.getAttribute("title")) { var text = whichpic.getAttribute("title"); } else { var text = ""; } var description = document.getElementById("description"); if (description.firstChild.nodeType == 3) { description.firstChild.nodeValue = text; } return false; } function prepareGallery() { if (!document.getElementsByTagName) return false; if (!document.getElementById) return false; if (!document.getElementById("imagegallery")) return false; var gallery = document.getElementById("imagegallery"); var links = gallery.getElementsByTagName("a"); for ( var i=0; i < links.length; i++) { links[i].onclick = function() { return showPic(this); } links[i].onkeypress = links[i].onclick; } } function addLoadEvent(func) { var oldonload = window.onload; if (typeof window.onload != 'function') { window.onload = func; } else { window.onload = function() { oldonload(); func(); } } } function preparePlaceholder() { if (!document.createElement) return false; if (!document.createTextNode) return false; var placeholder = document.createElement("img"); placeholder.setAttribute("id","placeholder"); placeholder.setAttribute("src","images/placeholder.gif"); 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"); gallery.parentNode.insertBefore(placeholder,gallery); gallery.parentNode.insertBefore(description,gallery); } addLoadEvent(preparePlaceholder); addLoadEvent(prepareGallery);
html清单
<!DOCTYPE html> <html lang="en"> <head> <meta http-equiv="content-type" content="text/html; charset=utf-8" /> <title>Image Gallery</title> <script type="text/javascript" src="scripts/showPic.js"></script> <link rel="stylesheet" href="styles/layout.css" type="text/css" media="screen" /> </head> <body> <h1>Snapshots</h1> <ul id="imagegallery"> <li> <a href="images/fireworks.jpg" title="A fireworks display"> <img src="images/thumbnail_fireworks.jpg" alt="Fireworks" /> </a> </li> <li> <a href="images/coffee.jpg" title="A cup of black coffee" > <img src="images/thumbnail_coffee.jpg" alt="Coffee" /> </a> </li> <li> <a href="images/rose.jpg" title="A red, red rose"> <img src="images/thumbnail_rose.jpg" alt="Rose" /> </a> </li> <li> <a href="images/bigben.jpg" title="The famous clock"> <img src="images/thumbnail_bigben.jpg" alt="Big Ben" /> </a> </li> </ul> </body> </html>
Ajax指异步加载页面技术 使用Ajax只更新页面一小部份内容,其余内容不用加载
Ajax的核心技术就是XMLHttpRequest对象,充当着中间人的角色 微软最先在IE5中以ActiveX对象的形式实现一个名叫XMLHTTP的对象,IE建立新的对象要使用如下代码
var request = new ActiveXObject("Msxml2.XMLHTTP.3.0");
其余浏览器基于XMLHttpRequest来建立对象
var request = new XMLHttpRequest();
getHTTPObject函数
function getHTTPObject(){ if (typeof XMLHttpRequest == "undefined") XMLHttpRequest = function(){ try{ return new ActiveXobject("Msxml2.XMLHTTP.6..0");} catch (e) {} try{ return new ActiveXobject("Msxml2.XMLHTTP.3..0");} catch (e) {} try{ return new ActiveXobject("Msxml2.XMLHTTP");} catch (e) {} return false; } retuen new XMLHttpRequest(); }
XMLHttpRequest对象有不少中方法。最有用的是open方法,指定服务器上要访问的文件。指定请求类型有GET,POST或SEND。第三个参数用于指定请求是否以异步方式发送和处理。 getNewContent函数
function getNewContent(){ var request = getHTTPObject(){ if (request){ request.open("get", "exeample.txt", true); request.onreadystatechage = function(){ if(request.readyState == 4) { var para = document.creatElement("p"); var txt = document.creatTextNode("request.responseText"); para.appendChild(txt); document.getElementById('new').appendChild(para) } }; request.send(null); }else { alert('Sorry, your browser doesn\'t support XMLHttpRequest'); } } addLoadEvent(getNewConent);
onreadystatechage是一个事件处理函数。它会在服务区XMLHttpRequest对象送回响应时被触发执行。在这个函数中根据服务器的响应作相应的处理。 也能够引用一个函数 浏览器会在不一样阶段更新readyState属性值
指渐进加强地使用Ajax 12章详细介绍如何使用Hijax技术