jQuery中DOM树操作之使用反向插入方法实例分析


Posted in Javascript onJanuary 23, 2015

本文实例讲述了jQuery中DOM树操作之使用反向插入方法。分享给大家供大家参考。具体分析如下:

使用反向插入方法

这里我们先把创建的内容插人到元素前面,然后再把同一个元素插人到文档 中的另一个位置。通常,当在jQuery中操作元素时,利用连缀方法更简洁也更有效。可是我们现在没有办法这样做,因为this是.insertBefore()的目标,是.appendTo()的内容。此时,利 用反向插入方法,可以帮我们解决问题。

像.insertBefore()和.appendTo()这样的插人方法,一般都有一个对应的反向方法。反 向方法也执行相同的操作,只不过“目标”和“内容”正好相反。例如:

$('<p>Hello</p>').appendTo('#container');

与下面的代码结果一样:

$('#container').append('<p>Hello</p>');

下面我们就使用.before()代替.insertBefore()来重构代码,参见如下代码:

$(document).ready(function() {

var $notes = $('<ol id="notes"></ol>')

.insertBefore('#footer');

$('span.footnote').each(function(index) {

$(this)

.before('<sup>' + (index + 1) + '</sup>')

.appendTo($notes)

.wrap('<li></li>');

});

});

插入方法回调

反向插入方法可以接受一个函数作为参数,与.attr()和.css()方法类似。 这个传入的函数会针对每个目标元素调用,返回被插入的HTML字符串。在此其 实也可以使用这个技术,但由于这样就需要对每个脚注都重复一遍相同的操作, 所以还是使用一个.each()方法来得更清晰。

现在,我们可以考虑最后一步了:在正文中相应的位置创建指向匹配脚注的链接和在脚注中 创建指向正文位置的链接。为此,每个脚注需要4处标记:两个链接,一个在正文中,一个在脚 注中;以及两个id属性。因为这样一来,传人.before()方法的参数会变得复杂,所以有必要 在这里使用一种新的创建字符串的方法。
在上面的代码中,我们使用了 操作符来拼接字符串。使用+操作符虽然没有问题,但
如果要拼接的字符串太多,那看起来就会很乱。所以,我们在这里使用数组的.join()方法来构 建一个更大的数组。换句话说,下面的两行代码结果相同。

var str = 'a' + 'b' + 'c';

var str = ['a', 'b', 'c'].join('');

虽然这个例子要求输人更多字符,但使用.join()方法可以避免因要拼接的字符串过多而引 起混乱。下面我们再看看示例代码吧,如下代码就是使用.join()创建字符串的过程。

$(document).ready(function() {

var $notes = $('<ol id="notes"></ol>') .insertBefore('#footer'); $('span.footnote').each(function(index) { $(this)

.before([

'<sup>', index + 1,

'</sup>'

].join(''))

.appendTo($notes)

.wrap('<li></li>');

});

});

注意,由于数组的每个元素会分别执行运算,因此不再需要把index+1放在括号里了。 使用这种技巧,可以为脚注标签添加一个指向页面底部的链接和一个唯一的id值。同时在后 面的方法中,也要给<li>元素中添加相应的id属性,以便该链接有匹配的目标,参见如下代码:

$(document).ready(function() {

var $notes = $('<ol id="notes"></ol>') .insertBefore('#footer'); $('span.footnote').each(function(index) { $(this)

.before([

'<a href="#footnote-', index + 1,

'"id="context-', index + 1,

'"class="context">',

'<sup>', index + 1,

'</sup></a>'

].join(''))

.appendTo($notes)

.wrap('<li id=Mfootnote-' + (index + 1) + IM></li>');

});

});

添加了这些标记之后,每个脚注标签就有了指向页面底部对应脚注的链接。那么所剩的就是 在脚注中创建一个指向其上下文的链接了。为此,可以使用.appendTo()的反向方 法.append(),参见如下代码:

$(document).ready(function() {

var $notes = $('<ol id="notes__></ol>')

.insertBefore('#footer');

$('span.footnote').each(function(index) {

$(this)

.before([

'<a href="#footnote-', index + 1,

'"id="context-', index + 1,

'"class = "context__>',

'<sup>', index + 1,

'</sup></a>'

].join(''))

.appendTo($notes)

.append([

' (<a href="#context-', index + 1,

'__>context</a>)'

].join(''))

.wrap('<li id="footnote-' + (index + 1) + '__></li>');

});

});

注意,这里的href指向了脚注标签中的id。运行结果中,可以看到包含新链接的脚注。

希望本文所述对大家的jQuery程序设计有所帮助。

Javascript 相关文章推荐
用dom+xhtml+css制作的一个相册效果代码打包下载
Jan 24 Javascript
火狐浏览器(firefox)下获得Event对象以及keyCode
Nov 13 Javascript
基本jquery的控制tabs打开的数量的代码
Oct 17 Javascript
jQuery中获取Radio元素值的方法
Jul 02 Javascript
node.js不得不说的12点内容
Jul 14 Javascript
window.open()实现post传递参数
Mar 12 Javascript
JavaScript中iframe实现局部刷新的几种方法汇总
Jan 06 Javascript
浅谈JS的基础类型与引用类型
Sep 13 Javascript
jquery实现焦点轮播效果
Feb 23 Javascript
js中获取键盘按下键值event.keyCode、event.charCode和event.which的兼容性详解
Mar 15 Javascript
微信小程序 es6-promise.js封装请求与处理异步进程
Jun 12 Javascript
使用javascript做在线算法编程
May 25 Javascript
PHPExcel中的一些常用方法汇总
Jan 23 #Javascript
jQuery操作DOM之获取表单控件的值
Jan 23 #Javascript
使用angular写一个hello world
Jan 23 #Javascript
Javascript中的几种URL编码方法比较
Jan 23 #Javascript
jQuery源码分析之jQuery.fn.each与jQuery.each用法
Jan 23 #Javascript
AngularJS语法详解(续)
Jan 23 #Javascript
Jquery动态替换div内容及动态展示的方法
Jan 23 #Javascript
You might like
PHP实现异步调用方法研究与分享
2011/10/27 PHP
php cli配置文件问题分析
2015/10/15 PHP
PHP QRCODE生成彩色二维码的方法
2016/05/19 PHP
php精度计算的问题解析
2019/06/21 PHP
ThinkPhP+Apache+PHPstorm整合框架流程图解
2020/11/23 PHP
Firefox+FireBug使JQuery的学习更加轻松愉快
2010/01/01 Javascript
如何判断鼠标是否在DIV的区域内
2013/11/13 Javascript
JavaScript中操作字符串小结
2015/05/04 Javascript
jQuery基础知识点总结(必看)
2016/05/31 Javascript
使用jQuery Ajax 请求webservice来实现更简练的Ajax
2016/08/04 Javascript
微信小程序 简单教程实例详解
2017/01/13 Javascript
vuejs实现本地数据的筛选分页功能思路详解
2017/11/15 Javascript
30分钟快速入门掌握ES6/ES2015的核心内容(下)
2018/04/18 Javascript
webpack开发环境和生产环境的深入理解
2018/11/08 Javascript
vue中的使用token的方法示例
2020/03/10 Javascript
《javascript设计模式》学习笔记五:Javascript面向对象程序设计工厂模式实例分析
2020/04/08 Javascript
JavaScript事件委托实现原理及优点进行
2020/08/29 Javascript
Python中的条件判断语句与循环语句用法小结
2016/03/21 Python
python实现二分查找算法
2017/09/21 Python
Django保护敏感信息的方法示例
2019/05/09 Python
python识别图像并提取文字的实现方法
2019/06/28 Python
在OpenCV里使用特征匹配和单映射变换的代码详解
2019/10/23 Python
给Django Admin添加验证码和多次登录尝试限制的实现
2020/07/26 Python
PyCharm2019 安装和配置教程详解附激活码
2020/07/31 Python
python输入中文的实例方法
2020/09/14 Python
python 实现的IP 存活扫描脚本
2020/12/10 Python
Dune London官网:英国著名奢华鞋履品牌
2017/11/30 全球购物
Lacoste澳大利亚官网:服装、鞋类及配饰
2018/11/14 全球购物
FILA德国官方网站:来自意大利的体育和街头服饰品牌
2019/07/19 全球购物
ParcelABC西班牙:包裹运送和快递服务
2019/12/24 全球购物
2014年医学生毕业自我鉴定
2014/03/26 职场文书
青春奉献演讲稿
2014/05/08 职场文书
营销学习心得体会
2014/09/12 职场文书
离婚撤诉申请书范本
2015/05/18 职场文书
2016年党校科级干部培训班学习心得体会
2016/01/06 职场文书
Redis实战之Lettuce的使用技巧详解
2022/12/24 Redis