【四十四】修改DOM結(jié)構(gòu)

直接使用瀏覽器提供的API對(duì)DOM結(jié)構(gòu)進(jìn)行修改,不但代碼復(fù)雜,而且要針對(duì)瀏覽器寫不同的代碼。
有了jQuery,我們就專注于操作jQuery對(duì)象本身。底層的DOM操作由jQuery完成就可以了,這樣一來,修改DOM也大大簡化了。
<p>
</br>

添加DOM

要添加新的DOM節(jié)點(diǎn),除了通過jQuery的html()這種暴力方法外,還可以用append()方法,例如:

<div id="test-div">
    <ul>
        <li><span>JavaScript</span></li>
        <li><span>Python</span></li>
        <li><span>Swift</span></li>
    </ul>
</div>

如何向列表新增一個(gè)語言?首先要拿到<ul>節(jié)點(diǎn):

var ul = $(''#test-div>ul'');

然后,調(diào)用append()傳入HTML片段:

ul.append('<li><span>Haskell</span></li>');

除了接受字符串,append()還可以傳入原始的DOM對(duì)象,jQuery對(duì)象和函數(shù)對(duì)象:

//  創(chuàng)建DOM對(duì)象:
var ps = document.createElement('li');
ps.innerHTML = '<span>Pascal</span>';
//  添加DOM對(duì)象:
ul.append(ps);

// 添加jQuery對(duì)象:
ul.append($('#scheme'));

//  添加函數(shù)對(duì)象:
ul.append(function (index, html) {
      return '<li><span>Language - ' + index +'</span></li>';
});

傳入函數(shù)時(shí),要求返回一個(gè)字符串、DOM對(duì)象或者jQuery對(duì)象。因?yàn)閖Query的append()可能作用于一組DOM節(jié)點(diǎn),只有傳入函數(shù)才能針對(duì)每個(gè)DOM生成不同的子節(jié)點(diǎn)。
append()把DOM添加到最后,prepend()則把DOM添加到最前。
另外注意,如果要添加的DOM節(jié)點(diǎn)已經(jīng)存在HTML文檔中。它會(huì)首先從文檔移除,然后再添加,也就是說,用append(),你可以移動(dòng)一個(gè)DOM節(jié)點(diǎn)。

如果要把新節(jié)點(diǎn)插入到指定位置,例如,JavaScript和Python之間,那么,可以先定位到JavaScript,然后用after()方法:

var js = $('#test-div>ul>li:first-child');
js.after('<li><span>Lua</span></li>');

也就是說,同級(jí)節(jié)點(diǎn)可以用after()或者before()方法。
<p>
</br>

刪除節(jié)點(diǎn)

要?jiǎng)h除DOM節(jié)點(diǎn),拿到j(luò)Query對(duì)象后直接調(diào)用remove()方法就可以了。如果jQuery對(duì)象包含若干 DOM節(jié)點(diǎn),實(shí)際上可以一次刪除多個(gè)DOM節(jié)點(diǎn):

var li = $('test-div>ul>li');
li.remove();  // 所有<li>全被刪除

<p>
</br>

練習(xí)

除了列出的3種語言外,請(qǐng)?jiān)偬砑覲ascal、Lua和Ruby,然后按字母順序排序節(jié)點(diǎn):

<!-- HTML結(jié)構(gòu) -->
<div id="test-div">
    <ul>
        <li><span>JavaScript</span></li>
        <li><span>Python</span></li>
        <li><span>Swift</span></li>
    </ul>
</div>

'use strict';
function add(L){
    return '<li><span>'+ L + '</span></li>'
}
$('div#test-div>ul').append(['Pascal','Lua','Ruby'].map(add));
var arr = $('div#test-div>ul>li').map(function(){
    return this.innerHTML;
}).get().sort();
$('div#test-div>ul>li').remove();
$('div#test-div>ul').append(arr.map(add))

// 測試:
;(function () {
    var s = $('#test-div>ul>li').map(function () {
        return $(this).text();
    }).get().join(',');
    if (s === 'JavaScript,Lua,Pascal,Python,Ruby,Swift') {
        alert('測試通過!');
    } else {
        alert('測試失敗: ' + s);
    }
})();

結(jié)果顯示:

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 一、樣式篇 第1章 初識(shí)jQuery (1)環(huán)境搭建 進(jìn)入官方網(wǎng)站獲取最新的版本 http://jquery.co...
    凜0_0閱讀 3,662評(píng)論 0 44
  • 第1章 簡介 第2章 DOM節(jié)點(diǎn)的創(chuàng)建 2-1 DOM創(chuàng)建節(jié)點(diǎn)及節(jié)點(diǎn)屬性 通過JavaScript可以很方便的獲...
    mo默22閱讀 932評(píng)論 0 8
  • DOM創(chuàng)建節(jié)點(diǎn)及節(jié)點(diǎn)屬性 通過JavaScript可以很方便的獲取DOM節(jié)點(diǎn),從而進(jìn)行一系列的DOM操作。但實(shí)際上...
    阿r阿r閱讀 1,076評(píng)論 0 9
  • 這世界上很多事情本來就是相對(duì)的吧,或許你看起來嘻嘻哈哈的人心里也會(huì)有你所不知道的心傷,看起來平淡無味的人可能又往...
    一只小肥喵閱讀 270評(píng)論 0 0
  • 原文收錄在我的 GitHub博客 (https://github.com/jawil/blog) ,喜歡的可以關(guān)注...
    微醺歲月閱讀 12,976評(píng)論 7 77

友情鏈接更多精彩內(nèi)容