jQuery中DOM樹操作之使用反向插入方法實(shí)例分析
本文實(shí)例講述了jQuery中DOM樹操作之使用反向插入方法。分享給大家供大家參考。具體分析如下:
使用反向插入方法
這里我們先把創(chuàng)建的內(nèi)容插人到元素前面,然后再把同一個(gè)元素插人到文檔 中的另一個(gè)位置。通常,當(dāng)在jQuery中操作元素時(shí),利用連綴方法更簡潔也更有效??墒俏覀儸F(xiàn)在沒有辦法這樣做,因?yàn)閠his是.insertBefore()的目標(biāo),是.appendTo()的內(nèi)容。此時(shí),利 用反向插入方法,可以幫我們解決問題。
像.insertBefore()和.appendTo()這樣的插人方法,一般都有一個(gè)對應(yīng)的反向方法。反 向方法也執(zhí)行相同的操作,只不過“目標(biāo)”和“內(nèi)容”正好相反。例如:
與下面的代碼結(jié)果一樣:
下面我們就使用.before()代替.insertBefore()來重構(gòu)代碼,參見如下代碼:
var $notes = $('<ol id="notes"></ol>')
.insertBefore('#footer');
$('span.footnote').each(function(index) {
$(this)
.before('<sup>' + (index + 1) + '</sup>')
.appendTo($notes)
.wrap('<li></li>');
});
});
插入方法回調(diào)
反向插入方法可以接受一個(gè)函數(shù)作為參數(shù),與.attr()和.css()方法類似。 這個(gè)傳入的函數(shù)會(huì)針對每個(gè)目標(biāo)元素調(diào)用,返回被插入的HTML字符串。在此其 實(shí)也可以使用這個(gè)技術(shù),但由于這樣就需要對每個(gè)腳注都重復(fù)一遍相同的操作, 所以還是使用一個(gè).each()方法來得更清晰。
現(xiàn)在,我們可以考慮最后一步了:在正文中相應(yīng)的位置創(chuàng)建指向匹配腳注的鏈接和在腳注中 創(chuàng)建指向正文位置的鏈接。為此,每個(gè)腳注需要4處標(biāo)記:兩個(gè)鏈接,一個(gè)在正文中,一個(gè)在腳 注中;以及兩個(gè)id屬性。因?yàn)檫@樣一來,傳人.before()方法的參數(shù)會(huì)變得復(fù)雜,所以有必要 在這里使用一種新的創(chuàng)建字符串的方法。
在上面的代碼中,我們使用了 操作符來拼接字符串。使用+操作符雖然沒有問題,但
如果要拼接的字符串太多,那看起來就會(huì)很亂。所以,我們在這里使用數(shù)組的.join()方法來構(gòu) 建一個(gè)更大的數(shù)組。換句話說,下面的兩行代碼結(jié)果相同。
var str = ['a', 'b', 'c'].join('');
雖然這個(gè)例子要求輸人更多字符,但使用.join()方法可以避免因要拼接的字符串過多而引 起混亂。下面我們再看看示例代碼吧,如下代碼就是使用.join()創(chuàng)建字符串的過程。
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>');
});
});
注意,由于數(shù)組的每個(gè)元素會(huì)分別執(zhí)行運(yùn)算,因此不再需要把index+1放在括號里了。 使用這種技巧,可以為腳注標(biāo)簽添加一個(gè)指向頁面底部的鏈接和一個(gè)唯一的id值。同時(shí)在后 面的方法中,也要給<li>元素中添加相應(yīng)的id屬性,以便該鏈接有匹配的目標(biāo),參見如下代碼:
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>');
});
});
添加了這些標(biāo)記之后,每個(gè)腳注標(biāo)簽就有了指向頁面底部對應(yīng)腳注的鏈接。那么所剩的就是 在腳注中創(chuàng)建一個(gè)指向其上下文的鏈接了。為此,可以使用.appendTo()的反向方 法.append(),參見如下代碼:
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指向了腳注標(biāo)簽中的id。運(yùn)行結(jié)果中,可以看到包含新鏈接的腳注。
希望本文所述對大家的jQuery程序設(shè)計(jì)有所幫助。
相關(guān)文章
jQuery autocomplate 自擴(kuò)展插件、自動(dòng)完成示例代碼
jquery-lib版本是 1.3.2的,該插件是簡單的擴(kuò)展插件,代碼也比較簡單的封裝。所以看起來也比較簡單不是很費(fèi)力,當(dāng)然封裝得也不是很好。2011-03-03jquery實(shí)現(xiàn)選中單選按鈕下拉伸縮效果
這篇文章主要介紹了jquery實(shí)現(xiàn)選中單選按鈕下拉伸縮效果的方法,涉及jquery鼠標(biāo)事件及頁面元素樣式的動(dòng)態(tài)操作技巧,該功能可用于動(dòng)態(tài)顯示特定內(nèi)容(如發(fā)票打印等),需要的朋友可以參考下2015-08-08jQuery使用hide方法隱藏指定元素class樣式用法實(shí)例
這篇文章主要介紹了jQuery使用hide方法隱藏指定元素class樣式,實(shí)例分析了jQuery中hide隱藏class樣式的技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-03-03jquery實(shí)現(xiàn)彈出層登錄和全屏層注冊特效
這篇文章主要為大家詳細(xì)介紹了jquery實(shí)現(xiàn)彈出層登錄和全屏層注冊特效,推薦給大家,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2015-08-08jQuery實(shí)現(xiàn)的fixedMenu下拉菜單效果代碼
這篇文章主要介紹了jQuery實(shí)現(xiàn)的fixedMenu下拉菜單效果代碼,通過自定義fixedMenu方法實(shí)現(xiàn)點(diǎn)擊下拉菜單效果,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-08-08formvalidator驗(yàn)證插件中有關(guān)ajax驗(yàn)證問題
jquery formvalidator插件是不錯(cuò)的國產(chǎn)驗(yàn)證插件了,做點(diǎn)普通的校驗(yàn)也是很方便的,但最近遇到個(gè)問題,發(fā)現(xiàn)如果表單整個(gè)表單是AJAX提交時(shí),就不能按傳統(tǒng)的做法了2013-01-01jQuery實(shí)現(xiàn)帶滑動(dòng)條的菜單效果代碼
這篇文章主要介紹了jQuery實(shí)現(xiàn)帶滑動(dòng)條的菜單效果代碼,涉及jquery遍歷頁面元素及動(dòng)態(tài)變換效果實(shí)現(xiàn)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-08-08jquery簡單實(shí)現(xiàn)網(wǎng)頁層的展開與收縮效果
這篇文章主要介紹了jquery簡單實(shí)現(xiàn)網(wǎng)頁層的展開與收縮效果的方法,涉及jquery中toggle結(jié)合animate方法操作頁面元素屬性的相關(guān)技巧,非常簡單實(shí)用,需要的朋友可以參考下2015-08-08