通常,我们在创建元素时,会使用以下代码:

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创建元素

var p = 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 () {
var p = document.createElement("p");
p.innerHTML = "this is a param"; document.getElementById("dv1").appendChild(p);
}

此段代码的缺点是,加载行为会在页面加载完毕之后再执行,即:如果页面上有大量图片或许多资源时,我们可能会因此等很久.

解决办法是,我们在该dom元素加载完毕后,即对其进行添加行为.jQuery函数可实现此功能:

$(function () {
var p = document.createElement("p");
p.innerHTML = "this is a param"; document.getElementById("dv1").appendChild(p);
}); 

常用函数

常用的函数比较多,按照帮助文档的分类罗列,我们来一个一个了解函数的使用方法.

1.内部插入

函数名 描述 举例 结果
append(content) 向每个匹配的元素内部追加内容
$("#dv1").append("<b>this is append</b>");
使用以下样式:

div
{
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>");
使用以下样式:

div
{
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"));
生成源码:

<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"));
生成源码:

<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() 删除匹配的集合的所有子节点
<div id="dv1">
dv1<p>
this is a param</p>
</div>
<div>
dv2</div>
<b>this is b</b>
<script type="text/javascript">
$("div").empty();
</script>
清除div下所有的子元素.
页面源码:

<div id="dv1">
</div>
<div>
</div>
<b>this is b</b>
remove([expr]) 从Dom中删除所有匹配的元素
expr:用于筛选元素的jQuery表达式
<div id="dv1">
dv1<p>
this is a param</p>
</div>
<div>
dv2</div>
<b>this is b</b>
<script type="text/javascript">
$("div").remove();
</script>
删除页面中所有的div
页面源码:

<B>this is b</B>

6.复制

函数名 描述 举例 结果
clone() 克隆匹配的元素,并且选中这些克隆的副本
<div id="dv1">dv1</div>
<b this is b</b>
<script type="text/javascript">
$("b").clone().insertBefore($("#dv1"));
</script>
 
clone(true) 克隆匹配的元素及其所有的事件,并选中这些克隆的副本
<div id="dv1">dv1</div>
<b onclick="alert(this.innerHTML)">this is b</b>
<script type="text/javascript">
$("b").clone(true).insertBefore($("#dv1"));
</script>

--选自《从零开始学习jQuery》

jQuery操作元素的更多相关文章

  1. 从零开始学习jQuery (四) 使用jQuery操作元素的属性与样式

    本系列文章导航 从零开始学习jQuery (四) 使用jQuery操作元素的属性与样式 一.摘要 本篇文章讲解如何使用jQuery获取和操作元素的属性和CSS样式. 其中DOM属性和元素属性的区分值得 ...

  2. jQuery入门(2)使用jQuery操作元素的属性与样式

    jQuery入门(1)jQuery中万能的选择器 jQuery入门(2)使用jQuery操作元素的属性与样式 jQuery入门(3)事件与事件对象 jQuery入门(4)jQuery中的Ajax()应 ...

  3. 使用jQuery操作元素的属性与样式

    本文学习如何使用jQuery获取和操作元素的属性和CSS样式. 元素属性和Dom属性 对于下面这样一个标签元素: <img id='img' src="1.jpg" alt= ...

  4. 《从零开始学习jQuery》:用jQuery操作元素的属性与样式

    元素属性和Dom属性简介 对于下面这样一个标签元素: <img id='img' src="1.jpg" alt='1' class="imgs"> ...

  5. jQuar总结10:jQuery操作元素的属性

    jQuery操作元素的属性 1 设置单个属性 //html <div></div> //js $('div').attr('id', 'box'); $('div').attr ...

  6. jQuery操作元素的class属性

    今天在做一个菜单折叠插件的时候需要根据页面的url改变其class属性.jQuery操作元素的属性是非常方便的,在此记录一下: 1.给元素添加class属性: addClass(class) (1)添 ...

  7. jQuery操作元素的属性与样式

    本文学习如何使用jQuery获取和操作元素的属性和CSS样式. 元素属性和Dom属性 对于下面这样一个标签元素: <img id='img' src="1.jpg" alt= ...

  8. JQuery操作元素的属性与样式及位置 复制代码

    <script type="text/javascript" src="JQuery/jquery-1.5.1.js"></script> ...

  9. JQuery操作元素的属性与样式及位置

    <script type="text/javascript" src="JQuery/jquery-1.5.1.js"></script> ...

  10. 使用jQuery操作元素属性

    在jQuery中,提供了attr函数来操作元素属性,具体如下: 函数名 说明 例子 attr(name) 取得第一个匹配元素的属性值. $("input").attr(" ...

随机推荐

  1. xml代码

    修改和删除: <?php$doc=new DOMDocument();$doc->load("php.xml");$root=$doc->documentElem ...

  2. $(this).val()与this.value的区别?text()与html()的区别?

    $(this).val()与this.value 作用:都是获得当前Dom对象的value值(一般是表单元素) text radio checkbox select 基本没有什么区别,只是: this ...

  3. 安全cookie登录状态设计方案

    我们知道web是基于HTTP协议传输的,明文传输是极其危险的,随便哪个抓包工具分析下数据包,就over啦,一个加密的传输过程应该包括两部分,一部分为身份认证,用户鉴别这个用户的真伪:另外一部分为数据加 ...

  4. 关于Zend Framework 2中 Zend\Session的使用

    一直迷惑于zend\Session的使用,这个是Zend\Session的官方教程的中文版,http://zend-framework-2.yangfan.co/blog/556. 其中最重要的是关于 ...

  5. Python学习笔记五--条件和循环

    5.1 if语句 没什么好说,if语句语法如下: if expression: expr_true_suit 5.1.1多重条件表达式 单个if语句可以通过布尔操作符and,or,not实现多重条件判 ...

  6. xampp 命令行修改数据库密码

    进入xampp 下 ./mysql -u root -p password 进入mysql控制台 UPDATE mysql.user SET Password=PASSWORD('password') ...

  7. 剑指offer之关于整数的处理

    首先是整数次方的处理 在这处理的时候有几个细节主义处理 1.当指数是负数的时候 2.当指数式0的时候 3.当不满足条件的时候要抛出异常 再一个就是常用的将一个树化为二进制的形式,或者是求整数的幂或者矩 ...

  8. .Net框架与框架类库-转

    http://blog.csdn.net/rrrfff/article/details/6686493 .NET Framework 具有两个主要组件:公共语言运行库和 .NET Framework类 ...

  9. C++中基于Crt的内存泄漏检测(重载new和delete,记录在Map里)

    尽管这个概念已经让人说滥了 ,还是想简单记录一下, 以备以后查询. #ifdef _DEBUG#define DEBUG_CLIENTBLOCK   new( _CLIENT_BLOCK, __FIL ...

  10. BZOJ1690: [Usaco2007 Dec]奶牛的旅行

    1690: [Usaco2007 Dec]奶牛的旅行 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 552  Solved: 286[Submit][St ...