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 相关文章推荐
javascript编程起步(第一课)
Jan 10 Javascript
Javascript 二维数组
Nov 26 Javascript
防止浏览器记住用户名及密码的简单实用方法
Apr 22 Javascript
Extjs407 getValue()和getRawValue()区别介绍
May 21 Javascript
javascript校验价格合法性实例(必须输入2位小数)
May 05 Javascript
使用delegate方法为一个tr标签加一个链接
Jun 27 Javascript
JavaScript 函数的执行过程
May 09 Javascript
JS检测页面中哪个HTML标签触发点击事件的方法
Jun 17 Javascript
微信小程序 image组件binderror使用例子与js中的onerror区别
Feb 15 Javascript
Vue.js开发环境快速搭建教程
Mar 17 Javascript
Angularjs 实现移动端在线测评效果(推荐)
Apr 05 Javascript
微信小程序实现底部导航
Nov 05 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生成短域名函数
2015/03/23 PHP
php显示时间常用方法小结
2015/06/05 PHP
PHP实现防盗链的方法分析
2017/07/25 PHP
基于jquery的loading效果实现代码
2010/11/05 Javascript
基于jquery的表头固定的若干方法
2011/01/27 Javascript
基于jquery循环map功能的代码
2011/02/26 Javascript
window.event快达到全浏览器支持了,以后使用就方便了
2011/11/30 Javascript
JavaScript实现简单图片翻转的方法
2015/04/17 Javascript
javascript中createElement的两种创建方式
2015/05/14 Javascript
Javascript中setTimeOut和setInterval的定时器用法
2015/06/12 Javascript
JQuery validate插件验证用户注册信息
2016/05/11 Javascript
jQuery+css实现非常漂亮的水平导航菜单效果
2016/07/27 Javascript
微信小程序 开发指南详解
2016/09/27 Javascript
JavaScript实现图片瀑布流和底部刷新
2017/01/02 Javascript
vue跨域解决方法
2017/10/15 Javascript
详谈commonjs模块与es6模块的区别
2017/10/18 Javascript
bootstrap Table服务端处理分页(后台是.net)
2017/10/19 Javascript
微信小程序之圆形进度条实现思路
2018/02/22 Javascript
vue router 源码概览案例分析
2018/10/09 Javascript
element-ui的回调函数Events的用法详解
2018/10/16 Javascript
D3.js的基础部分之数组的处理数组的排序和求值(v3版本)
2019/05/09 Javascript
Nuxt页面级缓存的实现
2020/03/09 Javascript
[36:52]DOTA2真视界:基辅特锦赛总决赛
2017/05/21 DOTA
Python中使用装饰器时需要注意的一些问题
2015/05/11 Python
Python中文竖排显示的方法
2015/07/28 Python
python开发之list操作实例分析
2016/02/22 Python
python利用正则表达式排除集合中字符的功能示例
2017/10/10 Python
Python基于scipy实现信号滤波功能
2019/05/08 Python
python下载卫星云图合成gif的方法示例
2020/02/18 Python
Python自动巡检H3C交换机实现过程解析
2020/08/14 Python
Foot Locker意大利官网:全球领先的运动鞋和服装零售商
2017/05/30 全球购物
法国春天百货官网:Printemps.com
2020/06/29 全球购物
争先创优活动总结
2014/08/27 职场文书
学校领导班子群众路线整改措施
2014/09/16 职场文书
2016春季运动会前导词
2015/11/25 职场文书
使用CSS实现六边形的图片效果
2022/08/05 HTML / CSS