通常,我们在创建元素时,会使用以下代码:
var p = document.createElement("p");
p.innerText = "this is param";
document.getElementById("dv1").appendChild(p);
通过appendChild方法,将该元素加入至另外一个元素.
偶尔,我们为了简单、方便,也会使用下面一个方法来创建元素,即:
document.getElementById("dv1").innerHTML = "<p>this is a param</p>";
上面的代码中,我们也动态的创建了一个元素,并将该元素添加至div中,但是,我们要说的是,这种方法是错误的,原因如下:
1.在页面加载时改变了页面的结构.在IE6中,如果网络速度变慢或页面内容太多,就会出现"终止操作"的错误.
2.使用修改HTML内容添加元素,不符合dom标准.在实际工作中,可能会碰到使用此方法后,浏览器并不能立刻显示添加的元素的状况.
所以,我们应摒弃这种编程方法,采用正确的,通用的方法来创建元素.
创建新的元素
下面介绍两种正确创建元素的方法.
1.使用HTML DOM创建元素
varp = document.createElement("p");
p.innerText = "this is param";
2.使用jQuery函数创建元素
$("<p>this is a param</p>")
我们此处使用了jQuery核心类库中的一个方法:
jQuery(html,ownerDocument)
return:jQuery
根据HTML原始字符串动态创建Dom元素.
此处,我们要注意,如果传入的是一个完整的HTML字符串,jQuery内部使用的也是innerHTML.所以,我们参见另一种方法来创建元素
//注意:
// 不要写成$("p").html("this is a param");
$("<p/>").html("this is a param");
将元素添加至对象上
添加元素时,我们要注意,应该在页面加载完元素后,才可以修改Dom的结构,至少也应该是需要被修改的元素被加载完后,再修改该元素.
我们可以使用下面两种方法来将元素添加至Dom
window.onload = function() {
varp = document.createElement("p");
p.innerHTML = "this is a param";
document.getElementById("dv1").appendChild(p);
}
此段代码的缺点是,加载行为会在页面加载完毕之后再执行,即:如果页面上有大量图片或许多资源时,我们可能会因此等很久.
解决办法是,我们在该dom元素加载完毕后,即对其进行添加行为.jQuery函数可实现此功能:
$(function() {
varp = document.createElement("p");
p.innerHTML = "this is a param";
document.getElementById("dv1").appendChild(p);
});
常用函数
常用的函数比较多,按照帮助文档的分类罗列,我们来一个一个了解函数的使用方法.
1.内部插入
函数名 | 描述 | 举例 | 结果 |
append(content) | 向每个匹配的元素内部追加内容 | $("#dv1").append("<b>this is append</b>"); | 使用以下样式: { display:inline; border:solid 1px silver; margin:2px; line-height:25px; } |
prepend(content) | 向每个匹配的元素内部前置内容 | $("#dv2").prepend("<b>this is prepend</b>"); | |
appendTo(content) | 把所有匹配的元素追加到另一个指定的元素集合中 | $("<b>this is appendTo</b>").appendTo($("#dv3")); | |
prependTo(content) | 将每个匹配的元素前置到另一个指定元素集合中 | $("<b>this is prependTo</b>").prependTo($("#dv4")); |
注意:
上述方法均是在元素内部进行操作,append是添加到元素内部的后面,而prepend是添加到元素内部的前面.
append和prepend均是主体A添加B,而appendTo和prependTo均是B添加至A主体.
2.外部插入
函数名 | 描述 | 举例 | 结果 |
after(content) | 在每个匹配的元素后插入内容 | $("#dv1").before("<b>this is before</b>"); | 使用以下样式: { display:inline; border:solid 1px silver; margin:2px; line-height:25px; } |
before(content) | 在每个匹配的元素前插入内容 | $("#dv2").after("<b>this is after</b>"); | |
insertAfter(content) | 把所有匹配的元素插入指定的元素集合后面 | $("<b>this is insertAfter</b>").insertAfter($("#dv3")); | |
insertBefore(content) | 把所有匹配的元素插入指定的元素集合前面 | $("<b>this is insertBefore</b>").insertBefore($("#dv4")); |
3.包裹
函数名 | 描述 | 举例 | 备注 |
wrap(elem) | 把匹配的元素用其他元素匹配的结构化标记包装起来 | $("b").wrap($("div")); | 生成源码: <b>this is b1</b></div> <div> <b>this is b2</b></div> <div> |
wrap(html) | 把匹配的元素用其他元素匹配的结构化标记包装起来 | $("b").wrap("<div></div>"); | |
wrapAll(elem) | 将所有匹配的元素用单个元素匹配起来 | $("b").wrapAll($("div")); | 生成源码: <B>this is b1</B> <B>this is b2</B> </DIV> |
wrapAll(html) | 将所有匹配的元素用单个元素匹配起来 | $("b").wrapAll("<div></div>"); | |
wrapInner(elem) | 将匹配元素的内容用一个Dom元素包装起来 | $("p").wrapInner($("b")); | <p> <b>this is p1</b> </p> |
wrapInner(html) | 将匹配元素的内容用一个Dom元素包装起来 | $("p").wrapInner("<b></b>"); |
注意:
wrap,wrapAll,wrapInner三者之间的区别.
wrap是为每个匹配的元素都包装了一个格式化标记.
wrapAll是将所有匹配的元素用一个格式化标记包装起来
4.替换
函数名 | 描述 | 举例 | 备注 |
replaceAll(selector) | 用匹配的元素替换掉所有selector匹配到的元素 | $("<p>this is param</p>").replaceAll($("b")); |
|
replaceWith(content) | 将匹配的元素替换成指定的HTML或Dom元素 | $("b").replaceWith("<p>this is param</p>"); |
|
注意:
此两个函数与append 和 appendTo相似.
replaceAll是满足条件的A元素集替换匹配的B元素集
replaceWith(content)是A元素集被content元素集替换
5.删除
函数名 | 描述 | 举例 | 备注 |
empty() | 删除匹配的集合的所有子节点 | <divid="dv1"> dv1<p> this is a param</p> </div> <div> dv2</div> <b>this is b</b> <scripttype="text/javascript"> $("div").empty(); </script> | 清除div下所有的子元素. </div> <div> </div> <b>this is b</b> |
remove([expr]) | 从Dom中删除所有匹配的元素 | <divid="dv1"> dv1<p> this is a param</p> </div> <div> dv2</div> <b>this is b</b> <scripttype="text/javascript"> $("div").remove(); </script> |
|
6.复制
函数名 | 描述 | 举例 | 结果 |
clone() | 克隆匹配的元素,并且选中这些克隆的副本 | <divid="dv1">dv1</div> <bthis is b</b> <scripttype="text/javascript"> $("b").clone().insertBefore($("#dv1")); </script> |
|
clone(true) | 克隆匹配的元素及其所有的事件,并选中这些克隆的副本 | <divid="dv1">dv1</div> <bonclick="alert(this.innerHTML)">this is b</b> <scripttype="text/javascript"> $("b").clone(true).insertBefore($("#dv1")); </script> |
--选自《从零开始学习jQuery》