JavaScript 动态创建标记与Ajax

JavaScript 动态创建标记与Ajax

一:简介

前面都是针对已经存在的标记进行操作、JavaScript同样可以动态创建标记并且与现有标记组合生成新的Document。同时简单的介绍了Ajax。

二:动态创建标记与组合

相关方法:

/**
 * Some old-shcool method
 */
document.write("str");
var node = document.getElementById('id');

var htmlValue = node.innerHTML;
node.innerHTML = htmlValue;

/**
 * DOM methods
 */
var parent = document.getElementById('id');
var node = document.createElement(nodeName);
parent.appendChild(node);

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

/**
 * example : <p>This is <em>my</em> content.</p>
 */
//1. create p and p's children elements
var p = document.createElement("p");
var txt1 = document.createTextNode("This is");
var em = document.createElement("em");
var txt2 = document.createTextNode("content.");

//2. create em's child element
var txt3 = document.createTextNode("my");

//Assemble them
p.appendChild(txt1);
p.appendChild(em);
p.appendChild(txt2);
em.appendChild(txt3);

/**
 * insertBefore
 */
parentElement.insertBefore(newElement, targetElement);

/**
 * insertAfter,without exiting method, custom create
 */
function insertAfter (newElement, targetElement) {
	var parentNode = targetElement.parentNode;
	if (parentNode.lastChild == targetElement){
		parentNode.appendChild(newElement);
	} else {
		parentNode.insertBefore(newElement, targetElement.nextSibling);
	}
}

三:Ajax

Ajax(Asynchronous JavaScript And XML)异步JavaScript和XML、用于对页面请求以异步方式与服务器进行交互进而达到局部刷新页面的效果。

Ajax实现过程:

/**
 * Ajax
 * 1. create request -- XMLHTTPObject
 * 2. request.open("methodType", url, isAsynchronously);
 * 3. request.onreadystatechange = function(){ //key request.readyState == 4}
 * 4. request.send(parameter);
 *
 * request.readyState have five possible values:
 * 0 : uninitialized
 * 1 : loading
 * 2 : loaded
 * 3 : interactive
 * 4 : complete
 */
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;
        }
        return false;
    }
    return new XMLHttpRequest();
}

function getNewContent() {
    var request = getHTTPObject();
    if (request) {
        request.open("GET", "example.txt", true);
        request.onreadystatechange = function () {
            if (request.readyState == 4) {
                var para = document.createElement("p");
                var txt = document.createTextNode(request.responseText);
                para.appendChild(txt);
                document.getElementById("new").appendChild(para);
            }
        };
        request.send(null);
    }
}

四:完善图片库

动态创建用于显示默认图片和指定链接的图片和title相关标记——showPicture.js:

/**
 * Attach onclick even on a link tag.
 */
function prepareGallery () {
	if (!document.getElementById) { return false }
	if (!document.getElementsByTagName) {return false}

	var imageGalleryNode = document.getElementById('imageGallery');
	if (!imageGalleryNode) {return false}

	var links = imageGalleryNode.getElementsByTagName("a");
	if (links.length > 0) {
		for (var i = links.length - 1; i >= 0; i--) {
			links[i].onclick = function (){
				/*
					if show picture work then stop a link active.
					a link will not work if return false.
				 */
				return showPicture(this) ? false : true;
			};
			links[i].onkeypress = links[i].onclick;
		}
	}
}

/**
 * Insert after the specified node
 */
function insertAfter (newNode, targetElement) {
	var parentNode = targetElement.parentNode;
	if (parentNode.lastChild == targetElement) {
		parentNode.appendChild(newNode);
	} else {
		parentNode.insertBefore(newNode, targetElement.nextSibling);
	}
}

/**
 * Construct placeholder element
 */
function preparePlaceholder () {

	if (!document.createElement) { return false; }
	if (!document.createTextNode) { return false; }
	if (!document.getElementById){ return false; }
	if (!document.getElementById('imageGallery')) { return false; }
	var imgElement = document.createElement("IMG");
	imgElement.src = "../picture/benchi.jpg";
	imgElement.alt =  "my image gallery";
	imgElement.id = "placeholder";

	var pElement = document.createElement("p");
	pElement.id = "description";

	var txt = document.createTextNode("Choose one picture !");

	var galleryNode = document.getElementById('imageGallery');
	insertAfter(imgElement, galleryNode);
	pElement.appendChild(txt);
	insertAfter(pElement, imgElement);
}

/**
 * Show the clicked picture.
 * which picture is clicked.
 * false if something is unexpected .
 */
function showPicture(whichPicture){
	var placeholder = document.getElementById('placeholder');
	if (!placeholder) {return false}
	if (placeholder.nodeName != "IMG") {return false}

	var source = whichPicture.getAttribute('href');
	placeholder.setAttribute('src', source);

	var description = document.getElementById('description');
	if (description) {
		var text = whichPicture.getAttribute('title') ? whichPicture.getAttribute('title') : "";
		var firstChildNode = description.firstChild;
		if (firstChildNode.nodeType == 3) {
			firstChildNode.nodeValue = text;
		}
	}
	return true;
}

/**
 * Multiple execute window.onload;
 */
function addEvent(fun){
	var oldFunction = window.onload;
	if (!oldFunction) {
		window.onload = fun;
	} else {
		window.onload = function () {
			oldFunction();
			fun();
		}
	}
}

addEvent(prepareGallery);
addEvent(preparePlaceholder);
时间: 2024-10-26 00:20:47

JavaScript 动态创建标记与Ajax的相关文章

JavaScript 动态创建标记

网页的结构由标记负责创建,JavaScript函数只用来改某些细节而不改变其底层结构,js也可用来改变网页的结构和内容: 传统方法:1.document.write 快捷将文档插入到网页中: 1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="utf-8" /> 5 <title>text</title> 6 </h

动态创建标记的三种方法

动态创建标记: 1.document.write() 可以直接把字符串插入文档中,最大的缺点是它违背了“行为应该与表现分离”的原则.避免使用document.write()方法. 2.innerHtml属性: innerHtml属性可以用来读.写某给定元素的html内容,是HTML的专有属性. 3.DOM方法: (1)创建新的元素:createElement()方法: (2)把新创建的节点插入某个文档的节点树:appendChild()方法: (3)创建文本结点:createTextNode()

JavaScript-DOM学习笔记之动态创建标记

此前的大多数DOM都是用来查找元素,getElementById和getElementsByTagName都可以方便快捷的找到文档中的某个或者某些特定的元素节点,这些元素随后可以用诸如setAttribute(改变某个属性的值)和nodeValue(改变某个元素节点所包含的文本)之类的方法和属性来处理.都是对已经存在的元素做出修改. 本文将通过创建新元素和修改现有元素来改变网页结构 标准的DOM方法可以用来替代innerHTML,他提供了更高的精确性和更强大的功能! DOM方法: 浏览器显示的内

用javascript动态创建并提交表单form,表格table

<script> //helper function to create the formfunction getNewSubmitForm(){ var submitForm = document.createElement("FORM"); document.body.appendChild(submitForm); submitForm.method = "POST"; return submitForm;} //helper function t

前端学习代码实例-JavaScript动态创建div并写入文本

介绍一下如何利用JavaScript动态创建div元素,然后在其中写入文本. 代码实例如下: <!DOCTYPE html> <html> <head> <meta charset=" utf-8"> <meta name="author" content="http://www.softwhy.com/" /> <title>web前端开发学习扣qun:731771211

《Javascript DOM编程艺术》--第七章动态创建标记

向浏览器里的文档动态添加标记的方法: 一. 传统方法:以下两种都是HTML专有的属性,不能用于其他标记语言文档. 1. document.write():最大的缺点是违背了“行为应该与表现分离”的原则. 2. innerHTML 属性:在需要把一大段HTML内容插入一份文档时,innerHTML属性可以又快又简单的完成这个任务.不过,innerHTML属性不会返回任何对刚插入的内容的引用. 在任何时候,DOM都可以来替代innerHTML. 二. 利用DOM方法:DOM是文档的表示. 1. cr

javascriptDOM编程艺术_学习笔记_知识点 动态创建标记

传统技术:document.write 和 innerHTML 深入剖析DOM方法:createElement.createTextNode.appendChild 和 insertBefore 7.1.1 document.write document对象的write()方法可以方便快捷地把字符串插入到文档里. document.write的最大缺点是它违背了“行为应该与表现分离”的原则. 1 document.write("<p>This is inserted.</p&g

JavaScript动态创建HTML元素

用ajax时会用到js的动态创建HTML元素,这里简单的讲一下方法: 先分析一下HTML元素 <span style="font-size:18px;"><body></span> <font color="red" size="12">红色<p>换行</p></font> </body> 包括HTML元素的名称.属性.和内容 <名称 属性1=&

javascript动态创建表格:新增、删除行和列

转载:http://www.cnblogs.com/pato/archive/2009/09/02/1559068.html 利用js来动态创建表格有两种格式,appendChild()和insertRow.insertCell().两种方式其实差不多,但第一种有可能在IE上有问题,所以推荐大家使用第二种了,直接说吧. 1.inserRow()和insertCell()函数 insertRow()函数可以带参数,形式如下: insertRow(index):index从0开始 这个函数将新行添加