`
mmdev
  • 浏览: 12916356 次
  • 性别: Icon_minigender_1
  • 来自: 大连
文章分类
社区版块
存档分类
最新评论

跟我学jquery(三)jquery动态创建元素和常用函数示例

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

一.动态创建元素

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

1.错误的编程方法

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

  1. <!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <htmlxmlns="http://www.w3.org/1999/xhtml">
  3. <head>
  4. <title>动态创建对象</title>
  5. </head>
  6. <body>
  7. <divid="testDiv">测试图层</div>
  8. <scripttype="text/javascript">
  9. document.getElementById("testDiv").innerHTML="<divstyle=\"border:solid1px#FF0000\">动态创建的div</div>";
  10. </script>
  11. </body>
  12. </html>



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

错误的原因:

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

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

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

2.创建新的元素

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

(1)使用HTMLDOM创建元素

什么是DOM

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

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

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

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

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

DOM被分为不同的部分(核心、XMLHTML)和级别(DOMLevel1/2/3):

CoreDOM

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

XMLDOM

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

HTMLDOM

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

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

  1. //使用Dom标准创建元素
  2. varselect=document.createElement("select");
  3. select.options[0]=newOption("加载项1","value1");
  4. select.options[1]=newOption("加载项2","value2");
  5. select.size="2";
  6. varobject=testDiv.appendChild(select);

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

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

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

$("<divstyle=\"border:solid1px#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","solid1px#FF0000").html("动态创建的div").appendTo(testDiv);


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

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

$("<divstyle=\"border:solid1px#FF0000\">动态创建的div</div>").appendTo(testDiv);

3.将元素添加到对象上

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

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

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

//传统方法

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


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

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

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



或者使用简便语法:

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


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

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

二.Query包装集的各个函数


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


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



3.选择符 :利用了CSSXpathXMLPathLanguage)选择符的能力,以及jQuery独有的选择符


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


3.2使用CSS选择符:
$("#some-id>li")选择特定id下的所有子li元素
$("#some-idli: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)')选择带有类horizontaldiv集合中的第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的包装
varmyTag=$('#some-id').get(0).tagName;
varmyTag=$('#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(){
varcurrentSize=$('#text-id').css('fontSize');//获取字体大小,如30px
varnum=parseFloat(currentSize,10);//将值转为浮点数,.parseFloat(,)javascript内置函数,这里是转为10进制的浮点数
varunit=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');//指定显示速度,在指定时间内元素的高、宽、不透明度逐渐增加到属性值,有:slow0.6秒,normal0.4秒,fast0.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
$('divp.contenta').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.6DOM中移除匹配的元素及其后代元素
$('#some-id').remove();


分享到:
评论

相关推荐

    JQuery常用函数及功能

    JQuery常用函数及功能 这些很好用!对javascript 很有帮助

    jquery刷新页面和JS常用的函数

    jquery刷新页面和JS常用的函数。另外jQuery实现跨域调用的问题可以联系我。

    jQuery为动态生成的select元素添加事件的方法

    下面小编就为大家带来一篇jQuery为动态生成的select元素添加事件的方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

    jquery 动态示例

    1. 2款jQuery图片自动切换常用广告代码 2. jquery+css五屏焦点图淡入淡出+圆形按钮切换广告图片代码 3. jQuery+CSS实用图片收缩与放大效果插件 4. jquery+div实现同时滑动切换的图文展示特效插件下载 5. jquery+...

    jQuery+ajax实现动态添加表格tr td功能示例

    主要介绍了jQuery+ajax实现动态添加表格tr td功能,结合实例形式分析了jQuery基于ajax动态创建页面table元素相关操作技巧,需要的朋友可以参考下

    jquery 常用函数集

    jquery 常用 函数 收集了在开发中常用的jquery 函数

    jQuery动态创建html元素的常用方法汇总

    本文实例讲述了jQuery动态创建html元素的常用方法,在使用jQuery进行WEB程序设计的时候非常有用。分享给大家供大家参考。具体方法如下: 一般来说,可以通过以下几种方式动态创建html元素: 1、使用jQuery创建元素的...

    jQuery实现动态给table赋值的方法示例

    主要介绍了jQuery实现动态给table赋值的方法,结合具体实例形式分析了jQuery动态操作table表格节点的相关技巧,需要的朋友可以参考下

    jquery动态创建联动下拉框

    jquery动态创建联动下拉框和jquery动态创建下拉框

    jQuery学习资料

    动态创建元素 21 四.管理jQuery包装集元素 25 五.常用函数举例 30 六.总结 30 从零开始学习jQuery (四) 使用jQuery操作元素的属性与样式 31 一.摘要 31 二.前言 31 三. 区分DOM属性和元素属性 31 四. 操作"DOM属性" ...

    jQuery学习示例 大全

    jQuery学习示例 大全 最新

    jQuery常用函数

    Jquery中为我们提供了很多有用的方法和属性,自己总结的一些常用的函数,方法。个人认为在开发中会比较常用的,仅供大家学习和参考。

    基于Jquery的动态创建DOM元素的代码

    jquery动态创建页面元素,mark一下,以备以后查询时使用。以创建div和input为例。

    jQuery、jQueryUI及jQueryMobile技巧与示例

    资源名称:jQuery、jQuery UI及jQuery Mobile技巧与示例内容简介:《jQuery、jQuery UI及jQuery Mobile技巧与示例》包括jQuery、jQuery UI、jQuery Mobile以及jQuery插件四部分内容。第一部分介绍jQuery核心库,从...

    jquery产品展示示例

    jquery产品展示示例jquery产品展示示例jquery产品展示示例jquery产品展示示例jquery产品展示示例

    jQuery函数全解析

    jQuery函数全解析

    jquery常用小例子

    jquery常用小例子jquery常用小例子jquery常用小例子jquery常用小例子jquery常用小例子jquery常用小例子jquery常用小例子

    从零开始学习jQuery-张子秋

    从零开始学习jQuery (三) 管理jQuery包装集 从零开始学习jQuery (四) 使用jQuery操作元素的属性与样式 从零开始学习jQuery (五) 事件与事件对象 从零开始学习jQuery (六) jQuery中的Ajax 从零开始学习jQuery (七...

    jQuery权威指南-源代码

    书名:jQuery权威指南(系统...其次详细讲解了jQuery的各种选择器、jQuery操作DOM的方法、jQuery中的事件与应用、jQuery中的动画和特效、Ajax在jQuery中的应用,以及各种常用的jQuery插件的使用方法和技巧...

    【原创】Jquery 示例代码,包括基本使用方法和AJAX

    Jquery 示例代码,包括基本使用方法和AJAX. 简单易学

Global site tag (gtag.js) - Google Analytics