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 相关文章推荐
js监听表单value的修改同步问题,跨浏览器支持
Dec 31 Javascript
jquery $(&quot;#variable&quot;) 循环改变variable的值示例
Feb 23 Javascript
jQuery中before()方法用法实例
Dec 25 Javascript
js实现多选项切换导航菜单的方法
Feb 06 Javascript
使用JavaScript脚本无法直接改变Asp.net中Checkbox控件的Enable属性的解决方法
Sep 16 Javascript
js+html5实现canvas绘制网页时钟的方法
May 21 Javascript
Bootstrap3下拉菜单的实现
Feb 22 Javascript
jQuery加密密码到cookie的实现代码
Apr 18 jQuery
Vue.js学习记录之在元素与template中使用v-if指令实例
Jun 27 Javascript
微信小程序地图(map)组件点击(tap)获取经纬度的方法
Jan 10 Javascript
微信小程序把百度地图坐标转换成腾讯地图坐标过程详解
Jul 10 Javascript
JavaScript修改注册表实例代码
Jan 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
德生S2000电路分析
2021/03/02 无线电
咖啡因含量是由谁决定的?低因咖啡怎么来?低因咖啡适合什么人喝
2021/03/06 新手入门
php数组函数序列之array_unique() - 去除数组中重复的元素值
2011/10/29 PHP
图片按比例缩放函数
2006/06/26 Javascript
JavaScript 对话框和状态栏使用说明
2009/10/25 Javascript
扩展javascript的Date方法实现代码(prototype)
2010/11/20 Javascript
js生成的验证码的实现与技术分析
2014/09/17 Javascript
JavaScript组件焦点与页内锚点间传值的方法
2015/02/02 Javascript
JS+CSS实现淡入式焦点图片幻灯切换效果的方法
2015/02/26 Javascript
jQuery实现的简单折叠菜单(折叠面板)效果代码
2015/09/16 Javascript
jQuery的deferred对象使用详解
2016/09/25 Javascript
AngularJS动态绑定HTML的方法分析
2016/11/07 Javascript
微信小程序 input输入框控件详解及实例(多种示例)
2016/12/14 Javascript
bootstrap表单按回车会自动刷新页面的解决办法
2017/03/08 Javascript
Javascript中toFixed计算错误(依赖银行家舍入法的缺陷)解决方法
2017/08/22 Javascript
webpack4.x打包过程详解
2018/07/18 Javascript
JavaScript数据结构与算法之二叉树遍历算法详解【先序、中序、后序】
2019/02/21 Javascript
VUE 实现复制内容到剪贴板的两种方法
2019/04/24 Javascript
详解VScode编辑器vue环境搭建所遇问题解决方案
2019/04/26 Javascript
微信小程序实现弹框效果
2020/05/26 Javascript
axios封装与传参示例详解
2020/10/18 Javascript
Ant-design-vue Table组件customRow属性的使用说明
2020/10/28 Javascript
[00:53]2015国际邀请赛 中国区预选赛一触即发
2015/05/14 DOTA
浅谈django中的认证与登录
2016/10/31 Python
Python抓取手机号归属地信息示例代码
2016/11/28 Python
Python实现希尔排序算法的原理与用法实例分析
2017/11/23 Python
Python从单元素字典中获取key和value的实例
2018/12/31 Python
客服主管岗位职责
2013/12/13 职场文书
十八届三中全会宣传方案
2014/02/21 职场文书
《望庐山瀑布》教学反思
2014/04/22 职场文书
低碳生活的宣传标语
2014/06/23 职场文书
2014年企业团支部工作总结
2014/12/10 职场文书
医药公司开票员岗位职责
2015/04/15 职场文书
加薪申请报告范本
2015/05/15 职场文书
MySQL单表千万级数据处理的思路分享
2021/06/05 MySQL
python 详解turtle画爱心代码
2022/02/15 Python