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 相关文章推荐
HTML 自动伸缩的表格Table js实现
Apr 01 Javascript
使用js显示当前时间示例
Mar 02 Javascript
jquery得到iframe src属性值的方法
Sep 25 Javascript
jQuery实现页面内锚点平滑跳转特效的方法总结
May 11 Javascript
理解javascript中try...catch...finally
Dec 25 Javascript
学习JavaScript设计模式之代理模式
Jan 12 Javascript
原生javascript 学习之js变量全面了解
Jul 14 Javascript
jQuery仿IOS弹出框插件
Feb 18 Javascript
JQuery EasyUI的一些常用组件
Jul 12 jQuery
JavaScript EventEmitter 背后的秘密 完整版
Mar 29 Javascript
vue中使用input[type=&quot;file&quot;]实现文件上传功能
Sep 10 Javascript
简单谈谈javascript高级特性
Sep 04 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读取网页文件内容的实现代码(fopen,curl等)
2011/06/23 PHP
yii分页组件用法实例分析
2015/12/28 PHP
Laravel配置全局公共函数的方法步骤
2019/05/09 PHP
浅谈PHP5.6 与 PHP7.0 区别
2019/10/09 PHP
php装饰者模式简单应用案例分析
2019/10/23 PHP
JavaScript调用堆栈及setTimeout使用方法深入剖析
2013/02/16 Javascript
jQuery插件开发详细教程
2014/06/06 Javascript
使用JavaScript刷新网页的方法
2015/06/04 Javascript
动态生成的DOM不会触发onclick事件的原因及解决方法
2016/08/06 Javascript
JavaScript编写一个简易购物车功能
2016/09/17 Javascript
Bootstrap路径导航与分页学习使用
2017/02/08 Javascript
推荐三款不错的图片压缩上传插件(webuploader、localResizeIMG4、LUploader)
2017/04/21 Javascript
JavaScript中变量、指针和引用功能与操作示例
2018/08/04 Javascript
element-ui封装一个Table模板组件的示例
2021/01/04 Javascript
JavaScript实现点击切换验证码及校验
2021/01/10 Javascript
利用Python的Django框架中的ORM建立查询API
2015/04/20 Python
Python上下文管理器和with块详解
2017/09/09 Python
Python并发编程协程(Coroutine)之Gevent详解
2017/12/27 Python
python版学生管理系统
2018/01/10 Python
python selenium循环登陆网站的实现
2019/11/04 Python
Python字符串三种格式化输出
2020/09/17 Python
CSS3哪些新特性值得称赞
2016/03/02 HTML / CSS
英国高端食品和葡萄酒超市:Waitrose
2016/08/23 全球购物
End Clothing美国站:英国男士潮牌商城
2018/04/20 全球购物
软件测试有哪些?什么是配置项?
2012/02/12 面试题
毕业生的自我评价分享
2013/12/18 职场文书
2014年幼儿园植树节活动方案
2014/03/02 职场文书
2014年党员公开承诺书范文
2014/03/28 职场文书
买卖车协议书
2014/04/21 职场文书
公司法定代表人授权委托书
2014/09/29 职场文书
2015年入党积极分子评语
2015/03/26 职场文书
物业工程部经理岗位职责
2015/04/09 职场文书
高中生综合素质评价范文
2015/08/18 职场文书
爱心捐款倡议书:点燃希望,传递温暖
2019/11/04 职场文书
Python实现的扫码工具居然这么好用!
2021/06/07 Python
详解Java线程池是如何重复利用空闲线程的
2021/06/26 Java/Android