JS DOM編程藝術(shù)第6/7兩章-完整code

知識點(diǎn)

  1. 獲取節(jié)點(diǎn)
# 單個
gallery = document.getElementById('gallery');

# 數(shù)組
li_list = document.getElementsByTagname('li');
  1. 獲取屬性
<a href="static/images/fireworks.jpg" title="A fireworks display">Fireworks</a>
# 獲取
a_element = document.getElementsByTagName(a)[0];
a_href = a_element.getAttribute('href');

完整代碼

html文檔

imagegallery.html
<!DOCTYPE html>
<html>
<meta charset="utf-8">
<head>
    <title>Image Gallery</title>
</head>
<link rel="stylesheet" type="text/css" href="static/css/layout.css" media="screen">
<body>
    <h1>Snapshots</h1>
    <!-- <a  onclick="return false;">點(diǎn)擊下</a> -->
    <div>
        <ul id="imagegallery">
        <li>
          <a href="static/images/fireworks.jpg" title="A fireworks display">Fireworks</a>
        </li>
        <li>
          <a href="static/images/coffee.jpg" title="A cup of black coffee">Coffee</a>
        </li>
        <li>
          <a href="static/images/rose.jpg" title="A red, red rose">Rose</a>
        </li>
        <li>
          <a href="static/images/bigben.jpg" title="The famous clock">Big Ben</a>
        </li>
    </ul>
    </div>
        <script type="text/javascript" src="static/js/showPic.js"></script>
        <!-- <script type="text/javascript" src="static/js/showPic_copy.js"></script> -->
<!--    <script type="text/javascript">
        function showPic(whichpic) {
        var source = whichpic.getAttribute('href');
        var placeholder = document.getElementById('placeholder');
        placeholder.setAttribute('src', source);
        }
    </script> -->
</body>
</html>

css部分

layout.css
*{
    margin:0;
    padding:0;
}

body{
    font-family: "Helvetica", "Arial", serif;
    color: #333;
    background-color: #ccc;
    margin: 1em 10%;
}

h1{
    color: #333;
    background-color: transparent; 
}

a{
    color: #c60;
    background-color: transparent;
    font-weight: bold;
    text-decoration: none;
}


/*如何讓ul里面的li橫向排列燕差,并且居中呢?ul設(shè)置為text-align:center;li設(shè)置-display-inline即可*/
ul{
    padding: 0;
}

li{
    float: left;
    padding: 1em;
    list-style: none;
}

/*#imagegallery{
    list-style: none;
}

#imagegallery li{
    display: inline;
}

#imagegallery li a img{
    border: 0;
}*/

js部分

showPic.js
function showPic(whichpic) {
    if (!document.getElementById('placeholder')){
        return true;
    }
    if (!document.getElementById('description')){
        return false;
    }
    var source = whichpic.getAttribute('href');
    
    var placeholder = document.getElementById('placeholder');
    placeholder.setAttribute('src', source);
    if (whichpic.getAttribute('title')){
        var text = whichpic.getAttribute("title");
    }
    else{
        var text = "";
    }
    var description = document.getElementById("description");
    if(description.firstChild.nodeType == 3){
        // alert(description.firstChild.nodeValue);
        description.firstChild.nodeValue = text;
        // alert(description.firstChild.nodeValue);     
    }
    return false;
}   


function prepareGallery() {
    if(!document.getElementById){
        return false;
    }
    if(!document.getElementsByTagName){
        return false;
    }
    if(!document.getElementById("imagegallery")){
        return false;
    }
    var gallery = document.getElementById("imagegallery");
    var links = gallery.getElementsByTagName("a");
    for(var i=0; i<links.length; i++){
        links[i].onclick = function() {
            return showPic(this);
            // return showPic(this);
        }
    }
}

    // <img id="placeholder" src="static/images/index.jpg" alt="my image gallery" />
    // <p id="description"> choose a picture</p>
/*
    1. 創(chuàng)建一個元素節(jié)點(diǎn)
        document.creatElement(nodeName)
    2. 元素節(jié)點(diǎn)插入到文檔樹中
        parent.appendChild(nodeName)
    3. 創(chuàng)建一個文本節(jié)點(diǎn)
        document.createTextNode(text)
    4. 文本節(jié)點(diǎn)插入到文檔樹中
        parent = document.getElementById(parent)
        parent.appendChild(nodeName)
    5. 將一個元素節(jié)點(diǎn)插入到一已知節(jié)點(diǎn)前
        parentElement = targetElement.parentNode
        parentElement.insertBerfore(newElement, targetElement)
    6. 目標(biāo)元素節(jié)點(diǎn)的后一個元素節(jié)點(diǎn)
        next_brother_node = target.nextSibling
*/

function insertAfter(newElement, targetElement){
    var parent = targetElement.parentNode;  // 獲取targetElement的父元素節(jié)點(diǎn) parent
    if(parent.lastChild == targetElement){  // 判定 parent節(jié)點(diǎn)的最后一個節(jié)點(diǎn)是不是target節(jié)點(diǎn)
        parent.appendChild(newElement);
    }
    else{
        parent.insertBefore(newElement, targetElement.nextSibling); // 
    }
}



function preparePlaceholder() {
    if(!document.createElement){
        return false;
    }
    if(!document.createTextNode){
        return false;
    }
    if(!document.getElementById){
        return false;
    }
    if(!document.getElementsByTagName){
        return false;
    }
    var placeholder = document.createElement('img');    // 創(chuàng)建了一個img元素節(jié)點(diǎn)
    placeholder.setAttribute('id', 'placeholder');      
    placeholder.setAttribute('src', 'static/images/index.jpg');
    placeholder.setAttribute('alt', 'my image gallery');

    var description = document.createElement('p');
    description.setAttribute('id', 'description');

    var desctext = document.createTextNode('choose an image');  // 創(chuàng)建了一個文本節(jié)點(diǎn) 
    description.appendChild(desctext);
    var gallery = document.getElementById('imagegallery');
    insertAfter(placeholder, gallery);
    insertAfter(description, placeholder);
}
/*
 這里學(xué)習(xí)的是
 1. 獲取元素節(jié)點(diǎn)  element.childNodes      # 這里就是elemennt所有的節(jié)點(diǎn)都獲取到,不過這里獲取到是一個數(shù)組
 2. 掌握節(jié)點(diǎn)的類型
    2.1 node.nodeType
        nodeType=1 : 元素節(jié)點(diǎn)
        nodeType=2 : 屬性節(jié)點(diǎn)
        nodeType=3 : 文本節(jié)點(diǎn)
    2.2 node.nodeValue # 獲取node節(jié)點(diǎn)的值
    2.3 針對 element.childNodes獲取到是一個數(shù)組,那么每次使用的使用都要使用索引來對每一個元素進(jìn)行使用
        element.childNodes[0] <=> element.firstChild
        element.childNodes[length-1] <=> element.lastChild
        
        ********************************************
        description = document.getElementById("description"); # 獲取到一個元素節(jié)點(diǎn)
        description.childNodes[0].nodeValue <=> description.firstChild.nodeValue = text; # 將description中的第一個節(jié)點(diǎn)屬性值賦值為 text變量
        ********************************************
*/

function countBodyChildren() {
    var body_element = document.getElementsByTagName("body")[0];  // 獲取body元素[0] 的所有節(jié)點(diǎn)
    var gallery = document.getElementById("imagegallery");
    alert(body_element.childNodes.length);  // 獲取節(jié)點(diǎn)的長度
    // for (var i = 0; i < body_element.length; i++) {
    //  alert(i.nodeType)
    }



function addLoadEvent(func){
    var oldonload = window.onload;
    if(typeof window.onload != 'function'){
        window.onload = func;
    }
    else{
        window.onload = function(){
        oldonload();
        func();
        }
    }
}

// addLoadEvent(countBodyChildren);
addLoadEvent(preparePlaceholder);
addLoadEvent(prepareGallery);
// window.onload = countBodyChildren;
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末队魏,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌饲宿,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,185評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件胆描,死亡現(xiàn)場離奇詭異瘫想,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)昌讲,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,652評論 3 393
  • 文/潘曉璐 我一進(jìn)店門国夜,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人短绸,你說我怎么就攤上這事车吹〕镌#” “怎么了?”我有些...
    開封第一講書人閱讀 163,524評論 0 353
  • 文/不壞的土叔 我叫張陵窄驹,是天一觀的道長朝卒。 經(jīng)常有香客問我,道長乐埠,這世上最難降的妖魔是什么抗斤? 我笑而不...
    開封第一講書人閱讀 58,339評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮饮戳,結(jié)果婚禮上豪治,老公的妹妹穿的比我還像新娘。我一直安慰自己扯罐,他們只是感情好负拟,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,387評論 6 391
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著歹河,像睡著了一般。 火紅的嫁衣襯著肌膚如雪秸歧。 梳的紋絲不亂的頭發(fā)上厨姚,一...
    開封第一講書人閱讀 51,287評論 1 301
  • 那天,我揣著相機(jī)與錄音键菱,去河邊找鬼谬墙。 笑死,一個胖子當(dāng)著我的面吹牛经备,可吹牛的內(nèi)容都是我干的拭抬。 我是一名探鬼主播,決...
    沈念sama閱讀 40,130評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼侵蒙,長吁一口氣:“原來是場噩夢啊……” “哼造虎!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起纷闺,我...
    開封第一講書人閱讀 38,985評論 0 275
  • 序言:老撾萬榮一對情侶失蹤算凿,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后犁功,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體氓轰,經(jīng)...
    沈念sama閱讀 45,420評論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,617評論 3 334
  • 正文 我和宋清朗相戀三年浸卦,在試婚紗的時候發(fā)現(xiàn)自己被綠了戒努。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,779評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖储玫,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情萤皂,我是刑警寧澤撒穷,帶...
    沈念sama閱讀 35,477評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站裆熙,受9級特大地震影響端礼,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜入录,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,088評論 3 328
  • 文/蒙蒙 一蛤奥、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧僚稿,春花似錦凡桥、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,716評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至蠢络,卻和暖如春衰猛,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背刹孔。 一陣腳步聲響...
    開封第一講書人閱讀 32,857評論 1 269
  • 我被黑心中介騙來泰國打工啡省, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人髓霞。 一個月前我還...
    沈念sama閱讀 47,876評論 2 370
  • 正文 我出身青樓卦睹,卻偏偏與公主長得像,于是被迫代替她去往敵國和親酸茴。 傳聞我的和親對象是個殘疾皇子分预,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,700評論 2 354

推薦閱讀更多精彩內(nèi)容