在上面两篇博客中列举了太多的API相信大家看着眼晕. 不过这些基础还必须要讲, 基础要扎实.其实对于这些列表大家可以跳过, 等以后用到时再回头看或者查询官方的API说明.在本博客中就给大家讲解一下这些头晕的API 主要讲解动态创建元素操作jQuery包装集的各个函数

一.动态创建元素

(这块转至网络,具体地址不详,以前找到的资料))

1.错误的编程方法

我们经常使用JavaScript动态的创建元素, 有很多程序员通过直接更改某一个容器的HTML内容.比如:

[html] view plaincopy print?
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml">
  3. <head>
  4. <title>动态创建对象</title>
  5. </head>
  6. <body>
  7. <div id="testDiv">测试图层</div>
  8. <script type="text/javascript">
  9. document.getElementById("testDiv").innerHTML = "<div style=\"border:solid 1px #FF0000\">动态创建的div</div>";
  10. </script>
  11. </body>
  12. </html>

上面的示例中我通过修改testDiv的内容,在页面上动态的添加了一个div元素. 但是请牢记,这是错误的做法!

错误的原因:

(1) 在页面加载时改变了页面的结构. 在IE6中如果网络变慢或者页面内容太大就会出现"终止操作"的错误. 也就是说"永远不要在页面加载时改变页面的Dom模型".

(2) 使用修改HTML内容添加元素, 不符合Dom标准. 在实际工作中也碰到过使用这种方法修改内容后, 某些浏览器中并不能立刻显示添加的元素, 因为不同浏览器的显示引擎是不同的. 但是如果我们使用Dom的CreateElement创建对象, 在所有的浏览器中几乎都可以. 但是在jQuery中如果传入的而是一个完整的HTML字符串, 内部也是使用innerHTML. 所以也不是完全否定innerHTML函数的使用.

所以从现在开始请摒弃这种旧知识, 使用下面介绍的正确方法编程.

2.创建新的元素

下面介绍两种正确的创建元素的方式.

(1)使用HTML DOM创建元素

什么是 DOM?

通过 JavaScript,您可以重构整个 HTML 文档。您可以添加、移除、改变或重排页面上的项目。

要改变页面的某个东西,JavaScript 就需要对 HTML 文档中所有元素进行访问的入口。这个入口,连同对 HTML 元素进行添加、移动、改变或移除的方法和属性,都是通过文档对象模型来获得的(DOM)。

在 1998 年,W3C 发布了第一级的 DOM 规范。这个规范允许访问和操作 HTML 页面中的每一个单独的元素。

所有的浏览器都执行了这个标准,因此,DOM 的兼容性问题也几乎难觅踪影了。

DOM 可被 JavaScript 用来读取、改变 HTML、XHTML 以及 XML 文档。

DOM 被分为不同的部分(核心、XML及HTML)和级别(DOM Level 1/2/3):

Core DOM

定义了一套标准的针对任何结构化文档的对象

XML DOM

定义了一套标准的针对 XML 文档的对象

HTML DOM

定义了一套标准的针对 HTML 文档的对象。

关于使用HTML DOM创建元素本文不做详细介绍, 下面举一个简单的例子:

[html] view plaincopy print?
  1. //使用Dom标准创建元素
  2. var select = document.createElement("select");
  3. select.options[0] = new Option("加载项1", "value1");
  4. select.options[1] = new Option("加载项2", "value2");
  5. select.size = "2";
  6. var object = testDiv.appendChild(select);

通过使用 document.createElement 方法我们可以创建Dom元素, 然后通过appendChild方法为添加到指定对象上.

(2) 使用jQuery函数创建元素

在jQuery中创建对象更加简单, 比如创建一个Div元素:

$("<div style=\"border:solid 1px #FF0000\">动态创建的div</div>")

我们主要使用jQuery核心类库中的一个方法:

jQuery( html, ownerDocument )
Returns: jQuery

根据HTML原始字符串动态创建Dom元素.

其中html参数是一个HTML字符串, 在jQuery1.3.2中对此函数做了改进:

当HTML字符串是没有属性的元素是, 内部使用document.createElement创建元素, 比如:

//jQuery内部使用document.createElement创建元素:

$("<div/>").css("border","solid 1px #FF0000").html("动态创建的div").appendTo(testDiv);

否则使用innerHTML方法创建元素:

//jQuery内部使用innerHTML创建元素:

$("<div style=\"border:solid 1px #FF0000\">动态创建的div</div>").appendTo(testDiv);

3.将元素添加到对象上

我们可以使用上面两种方式创建一个而元素, 但是上面已经提到一定不要在页面加载时就改变页面的DOM结构, 比如添加一个元素. 正确的做法是在页面加载完毕后添加或删除元素.

传统上, 使用window.onload完成上述目的:

//DOM加载完毕后添加元素

//传统方法

window.onload = function() { testDiv.innerHTML = "<div style=\"border:solid 1px #FF0000\">动态创建的div</div>"; }

虽然能够在DOM完整加载后, 在添加新的元素, 但是不幸的是浏览器执行window.onload函数不仅仅是在构建完DOM树之后, 也是在所有图像和其他外部资源完整的加载并且在浏览器窗口显示完毕之后. 所以如果某个图片或者其他资源加载很长时间, 访问者就会看到一个不完整的页面, 甚至在图片加载之前就执行了需要依赖动态添加的元素的脚本而导致脚本错误.

解决办法就是等DOM被解析后, 在图像和外部资源加载之前执行我们的函数.在jQuery中让这一实现变得可行:

[javascript] view plaincopy print?
  1. //jQuery 使用动态创建的$(document).ready(function)方法
  2. $(document).ready(
  3. function() { testDiv.innerHTML = "<div style=\"border:solid 1px #FF0000\">使用动态创建的$(document).ready(function)方法</div>"; }
  4. );

或者使用简便语法:

[javascript] view plaincopy print?
  1. //jQuery 使用$(function)方法
  2. $(
  3. function() { testDiv.innerHTML += "<div style=\"border:solid 1px #FF0000\">使用$(function)方法</div>"; }
  4. );

使用$()将我们的函数包装起来即可. 而且可以在一个页面绑定多个函数, 如果使用传统的window.onload则只能调用一个函数.

所以请大家将修改DOM的函数使用此方法调用. 另外还要注意document.createElement和innerHTML的区别. 如果可以请尽量使用document.createElement和$("<div/>")的形式创建对象.

二.Query包装集的各个函数

1.文档加载完成执行函数
 $(document).ready(function(){
 alert("开始了");
 });

2.添加/删除CSS类
 $("#some-id").addClass("NewClassName");
 $("#some-id").removeClass("ClassNameToBeRemoved");

3.选择符 :利用了CSS和Xpath(XML Path Language)选择符的能力,以及jQuery独有的选择符

 3.1常用的:
 1.根据标签名: $('p') 选择文档中的所有段落
 2. 根据ID: $("#some-id")
 3.类: $('.some-class')

 3.2使用CSS选择符:
 $("#some-id > li") 选择特定id下的所有子li元素
 $("#some-id li:not(.horizontal)") 伪类选择,特定id下所有没有.horizontal 类的li元素

 3.3使用XPath选择符:
 属性选择:$("a[@title]") 选择所有带title属性的链接
 $("div[ol]") 选择包含一个ol元素的所有div元素
 $('a[@href^="mailto:%22]') 选择所有带href属性[@href]且该属性值以mailto开头^="mailto"(^标识字符串开始,$标识字符串结尾,*表示字符串中任意位置)
 $('a[@href$=".pdf"]') 选择带有href属性且该属性值以.pdf结尾的所有链接
 $('a[@href*="mysite.com"]') 选择mysite.com出现在href任意位置(包含mysite.com)的所有链接

 3.4JQuery自定义选择符(过滤器,从已选择的结果集中过滤出符合某一条件的所有元素),与CSS的伪类选择符相似,使用“:”开头
 1.$('div.horizontal:eq(1)') 选择带有类horizontal的div集合中的第2个项
 $('div:nth-child(1)') 选择作为其父元素第1个子元素的所有div
 2.自定义选择符:odd和:even选择奇偶行
 $('tr:odd').addClass('odd'); //过滤选择结果集中的奇数元素
 $('tr:even').addClass('even'); //过滤选择结果集中的偶数元素
 3.自定义选择符:contains()
 $('td:contains("Henry")') 选择包含Henry字符串的所有表格

 3.5JQuery选择函数
 1.$('#some-id').parent() 选择特定元素的父元素
 2.$('#some-id').next() 选择特定元素最近的下一个同级元素
 3.$('#some-id').siblings() 选择特定元素的所有同级元素
 4.$('#some-id').find('.some-class') 选择特定元素下所有包含特定类的元素
 5.$('#some-id').find('td').not(':contains("Henry")') 选择特定元素下表格内容不包含Henry的所有元素
 5.$('#some-id').find('td').not(':contains("Henry")').end() .end()表示回到最后一次.find()的元素处

 3.6访问DOM元素,使用get()方法从选择后的JQuery对象中获得,去掉JQuery的包装
 var myTag = $('#some-id').get(0).tagName;
 var myTag = $('#some-id')[0].tagName; //与上面的等效

4.事件(都是给某一元素绑定事件)


 4.1绑定事件
 $("#some-id").bind("click", function(){ })
 $("#some-id").unbind("click", bindedFunctionName); //移除已绑定的事件,前提是绑定的函数有名称(不是匿名函数)
 $("#some-id").click(function(){ })

4.2复合函数绑定事件
 $("#some-id").toggle(function(){ } ,function(){ }); //交替执行
 $(“#some-id”).toggleClass("hidden"); // 添加/删除类交替进行
 $("#some-id").hover(function(){ }, function(){ }); //鼠标进入元素时执行第一个函数,离开元素时执行第二个函数
 $("#some-id").one("click", functionName); //只需触发一次,随后便立即解除绑定

4.3模仿用户触发某一事件
 $("#some-id").trigger("click"); //触发特定元素的click事件

5.为元素添加效果


 5.1读取或设置CSS样式属性
 $("#some-id").css("property") //读取样式值
 $('#some-id').css('property', 'value') //设置一个样式值
 $('#some-id').css({property1: 'value1', property2: 'value2'}) //设置多个样式属性

5.2改变字体大小
 $(document).ready({
 $('#button-id').click(function(){
 var currentSize = $('#text-id').css('fontSize'); //获取字体大小,如30px
 var num = parseFloat(currentSize, 10); //将值转为浮点数,.parseFloat( , )为javascript内置函数,这里是转为10进制的浮点数
 var unit = currentSize.slice(-2); //获取单位名称,如px,.slice()是javascript内置函数,获取字符串指从定位置开始的子字符串,-2表示倒数两个字符
 num *= 1.5;
 $('text-id').css('fontSize', num + unit); //设置字体大小样式
 });
 });

5.3隐藏和显示
 $('#some-id').show(); //无效果,会自动记录原来的display属性值(如:block, inline),再回复display值
 $('#some-id').hide(); //无效果,等效于:$('#some-id').css('display', 'none'); 隐藏元素,不保留物理位置
 大小、透明度逐渐变化的显示或隐藏
 $('#some-id').show('slow'); //指定显示速度,在指定时间内元素的高、宽、不透明度逐渐增加到属性值,有:slow是0.6秒,normal是0.4秒,fast是0.2秒,或者直接填入毫秒数
 $('#some-id').hide(800); //与.show()指定速度显示一样,指定时间内高、宽、不透明度逐渐减小到0
 淡入淡出
 $('some-id').fadeIn('slow'); //指定时间内不透明度属性值由0增加到1
 $('some-id').fadeOut('slow'); //指定时间内不透明度值由1减小到0

5.4构建具有动画效果的show
 主要调用.animate()方法,其有4个参数:包含样式属性及值的映射;可选的速度参数;可选的缓动类型;可选的回调函数;
 1.并发显示多个效果
 $('#some-id').animate({height: 'show', width: 'show', opacity: 'show'}, 'slow', function(){ alert('动画显示元素');});
 $('div .button').animate({left:600, height:44}, 'slow'); //水平位置从0移动到600,高度由0增加到44
 2.排队显示多个效果,级联多个.animate(),一个效果显示完了再显示下一个效果
 $('#some-id').animate({left:600}, 'slow').animate({height: 44}, 'slow');

6。DOM操作


 6.1属性操作
 $('#some-id').attr('property'); //获取属性
 $('#some-id').attr('property','value'); //设置属性
 $('#some-id').attr({'property1': 'value1', 'property2': 'value2'}); //设置多个属性
 修改一个段落中所有链接,并给每个链接附上新的id号
 $('div p .content a').each(function(index){
 $(this).attr({
 'rel': 'external',
 'id': 'link_' + index
 });
 });
 // ********* JQuery的.each()类似一个迭代器,给其传递的参数index类似一个计数器 *********

6.2插入新元素
 1.将元素插入到其他元素前面:.insertBefore()和.before()
 2.将元素插入到其他元素后面:.insertAfter()和after()
 3.将元素插入到其他元素内部或后面(相当于追加一个元素):appendTo()和append()
 4.将元素插入到其他元素内部或前面(相当于追加一个元素):prependTo()和prepend()

6.3包装元素,将元素包装到其他元素中 .wrap();
 $('#some-id').wrap('<li></li>'); // 将某一特定元素包装到li中,即在特定元素外围添加一个包围元素

6.4复制元素 .clone()
 1.$('#some-id').clone().appendTo($('body'));
 2.复制深度,当传入false参数时,只复制匹配上的元素,其内部的其他元素不复制
 $('#some-id').clone(false)
 注意:.clone()方法不会复制元素中的事件

6.5移除匹配元素中的元素,类似清空元素
 $('#some-id').empty();

6.6从DOM中移除匹配的元素及其后代元素
 $('#some-id').remove();

from: http://blog.csdn.net/csh624366188/article/details/7679187

Java程序员从笨鸟到菜鸟之(八十七)跟我学jquery(三)jquery动态创建元素和常用函数示例相关推荐

  1. java程序员从笨鸟到菜鸟(八)泛型

    1. 使用场景:一般是集合用的较多. 2. 使用规则: public static <E> void printArr(E [] inputArray) 所有泛型方法声明都有一个类型参数声 ...

  2. Java程序员从笨鸟到菜鸟全部博客目录

    本文来自:曹胜欢博客专栏.转载请注明出处:http://blog.csdn.NET/csh624366188 欢迎关注微信账号:java那些事:csh624366188.每天一篇java相关的文章 大 ...

  3. Java程序员从笨鸟到菜鸟之(序言)+全部链接

    http://blog.csdn.net/csh624366188 大学上了一年半,接触java也一年半了,虽然中间也有其他东西的学习,但是还是以java为主路线,想想这一年半,除去前半年几乎全玩了, ...

  4. Java程序员由笨鸟到菜鸟 电子版书正式发布 欢迎大家下载

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 欢迎关注 ...

  5. Java程序员从笨鸟到菜鸟之——总结和声明

    前段时间经过大约二十天的时间把javaSE的内容总结了一下,最近由于个人原因和一些乱七八糟的事情,一直没在更新,首先感谢那些一如既往支持我的朋友.最近不知道为什么,一直很懒,做东西也一直是效率很低,生 ...

  6. Java程序员从笨鸟到菜鸟之(五)java开发常用类(包装,数字处理集合等)(下)...

     本文来自:曹胜欢博客专栏.转载请注明出处:http://blog.csdn.net/csh624366188 写在前面:由于前天项目老师建设局的项目快到验收阶段,所以,前天晚上通宵,昨天睡了大半天, ...

  7. Java程序员从笨鸟到菜鸟之(一百零九)一步一步学习webservice(三)开发第一个基于XFire的webservice

    在日常开发中,常用的webservice引擎主要有Axis,axis2,Xfire以及cxf(Xfire的升级版).现在只有axis2和cxf官方有更新.今天我们先以一个比较老的引擎为例.来讲诉一下w ...

  8. Java程序员从笨鸟到菜鸟之(一百零八)一步一步学习webservice(二)webservice基本原理

    本来这第二篇打算讲解"开发第一个基于XFire的webservice"的内容来着.但是想想.开发实例只是局限于了会用的层面上.如果想真正的理解webservice还是需要挖掘其原理 ...

  9. Java程序员从笨鸟到菜鸟之(五)java开发常用类(包装,数字处理集合等)(下)

    写在前面:由于前天项目老师建设局的项目快到验收阶段,所以,前天晚上通宵,昨天睡了大半天,下午我们宿舍聚会,所以时间有点耽误,希望大家见谅 上接: Java程序员从笨鸟到菜鸟之(四)java开发常用类( ...

  10. Java程序员从笨鸟到菜鸟之(一百零六)java操作office和pdf文件(四)页面列表导出cvs,excel、pdf报表.

    在平常的开发中我们常常遇到不仅仅只是导出excel报表的情况.有时候也需要导出pdf或者CSV报表.其实原理都差不多.刚开始本来不打算也这篇博客介绍这个的.感觉这篇博客和前面的博客有点雷同.原理基本都 ...

最新文章

  1. 16 美元,黑客就能截获你的短信?
  2. 摘自ubantuer-Linux防火墙iptables学习笔记(三)iptables命令详解和举例
  3. 【ELK】ELK集群搭建(ElasticSearch Logstash Kinaba)
  4. linux服务器文件索引inodes满了
  5. 在STM32价格疯长下,哪些国产32可以替代?
  6. startActivityForResult用法详解
  7. 对xml操作的主要方法[轉]
  8. linux上修改html,linux进程名修改
  9. iframe框架及优缺点
  10. 常见的反爬措施:UA反爬和Cookie反爬
  11. mysql group by top_Mysql group by top N的问题 | 学步园
  12. Netty简单样例分析[转]
  13. tp3.2中怎么访问分类及子分类下面的文章
  14. oracle日期00开头,【原】Oracle中产生 “0000-00-00”格式的日期
  15. mysql 批量导入_MySQL快速大量导入
  16. 人生第一次和第二次车祸
  17. python和excel进行数据交换_python-doc/使用Python和Excel进行交互式数据分析.md at master · HSUCHING/python-doc · GitHub...
  18. c语言编程电话簿,C语言实现电话簿项目.pdf
  19. 谭浩强C++ 第八章
  20. 软件工程(三)——敏捷开发和理解需求

热门文章

  1. 在电商界摸爬滚打10年,我学到这三点经验教训
  2. MySQL - 分页查询优化的两个案例解析
  3. interface declaration, parcelable declaration, AidlTokenType.import or AidlTokenType.package ...
  4. 我为什么重新开始学习数学?
  5. 计算机网掉了,非常急电脑掉网我电脑上上网就会自己掉网不显示网络断开但一切有关上 爱问知识人...
  6. windows powershell实战指南_【安全研究】powershell在主机中是否存在安全隐患?
  7. Java设计模式(三) -- 代理模式
  8. TypeScript学习笔记2:数据类型
  9. 深度学习-TF函数-layers.concatenate用法 numpy数组维度
  10. html 判断页面支持canvas,HTML5 Canvas之测试浏览器是否支持Canvas的方法