《JavaScript DOM 编程艺术》读书笔记

《JavaScript DOM 编程艺术》读书笔记——其五

第七章

1、innerHTML属性

使用innerHTML属性,可以把JavaScript代码从标记中分离出来,即不用在标记的<body>部分插入<script>标签。
举例:
(1)test.html:
    <div id="testdiv">
       <p>This is <em>my</em> content.</p>
    </div>
    test.js:
    //显示id值为testdiv的innerHTML属性值
    //即显示:<p>This is <em>my</em> content.</p>
    window.onload = function()
    {
      var testdiv = document.getElementById("testdiv");
      alert(testdiv.innerHTML);
    }
 innerHTML属性无细节,要想获得细节,要使用DOM方法和属性
(2)test.html:
    <div id="testdiv">
    </div>
    test.js:
    window.onload = function()
    {
      var testdiv = document.getElementById("testdiv");
      testdiv.innerHTML = "<p>I inserted <em>this</em> content.</p>";
     }    
 使用innerHTML属性后,testdiv元素内的HTML内容均被替换。

2、DOM方法

(1)createElement方法:创建一个新元素节点。
    举例:
    var para = document.createElement("p");
    注:此时创建的p元素虽然已经存在,但它并非任何一个DOM节点树的组成部分,只是游荡在JS里的文档碎片,还无法显示在浏览器的窗口画面里。不过它已有了自己的DOM属性(一个nodeType和一个nodeName值)。
(2)appendChild方法:使新创建的节点元素成为要插入的节点元素的一个子节点。
    举例:
    var testdiv = document,getElementById("testdiv");
    testdiv.appendChild(para);
    注:此时的p元素现已成为testdiv元素的一个子节点,被插入到test.html文档的节点树中。
(3)createTextNode方法:创建一个文本节点。
    举例:
    var txt = document.createTextNode("Hello world!");
    para.appendChild(txt);
 完整代码举例(为testdiv元素插入一段文本):
 window.onload = function()
 {
    var para = document.createElement("p");
    var testdiv = document,getElementById("testdiv");
    testdiv.appendChild(para);
    var txt = document.createTextNode("Hello world!");
    para.appendChild(txt);
 }
(4)insertBefore方法:把一个新元素插入到一个现有元素的前面。
    举例:
    var gallery = document.getElementById("imagegallery");
    gallery.parentNode.insertBefore(placeholder,gallery);
    gallery.parentNode.insertBefore(description,gallery);
    注:此例效果为JS图片库中图片(placeholder)与介绍文本段(description)插在图片清单(imagegallery)之前。
(5)在现有元素后插入一个新元素:编写insertAfter函数并使用。

3、JavaScript图片库二次改进版:

test.html:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>Test</title>
        <link rel="stylesheet" href="../css/JavaScript_DOM_编程艺术_test.css" media="screen" />
    </head>
    <body>
        <h1>Snapshots</h1>
        <ul id="imagegallery">
            <li>
                <a href="../img/1.jpeg" title="picture01"><img src="../img/1.jpeg" alt="Breakfast" width="120px" height="90px" /></a>
            </li>
            <li>
                <a href="../img/2.jpeg" title="picture02"><img src="../img/2.jpeg" alt="Sea" width="120px" height="90px" /></a>
            </li>
            <li>
                <a href="../img/3.jpeg" title="picture03"><img src="../img/3.jpeg" alt="Flower" width="120px" height="90px" /></a>
            </li>
            <li>
                <a href="../img/4.jpeg" title="picture04"><img src="../img/4.jpeg" alt="Tree" width="120px" height="90px" /></a>
            </li>
            <li>
                <a href="../img/5.jpg" title="picture05"><img src="../img/5.jpg" alt="Street" width="120px" height="90px" /></a>
            </li>
            <li>
                <a href="../img/6.jpeg" title="picture06"><img src="../img/6.jpeg" alt="Sky" width="120px" height="90px" /></a>
            </li>
        </ul>
        <script type="text/javascript" src="../js/JavaScript_DOM_编程艺术_test.js"></script>
    </body>
</html>

test.js:

function addLoadEvent(func)
{
    var oldonload = window.onload;
    if(typeof window.onload != 'function')
    {
        window.onload = func;
    }
    else
    {
        window.onload = function()
        {
            oldonload();
            func();
        }
    }
}
addLoadEvent(preparePlaceholder);
addLoadEvent(prepareGallery);
function prepareGallery()
{
    if(!document.getElementsByTagName)
    {
        return false;
    }
    if(!document.getElementById)
    {
        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()
        {
            showPic(this);
            return !showPic(this);
        }
    }
}
function showPic(whichpic)
{
    if(!document.getElementById("placeholder"))
    {
        return false;
    }
    var source = whichpic.getAttribute("href");
    var placeholder = document.getElementById("placeholder");
    placeholder.setAttribute("src",source);
    if(document.getElementById("description"))
    {
        var text = whichpic.getAttribute("title")?whichpic.getAttribute("title"):"";
        var description = document.getElementById("description");
        description.firstChild.nodeValue = text;
    }
    return true;
}
//两个参数分别为将被插入的元素与目标元素
function insertAfter(newElement,targetElement)
{
    var parent = targetElement.parentNode;//将目标元素的parentNode属性值保存在变量里
    if(parent.lastChild == targetElement)//检查目标元素是否为parent最后一个子元素
    {
        parent.appendChild(Element);//是,则把新元素插入到parent上
    }
    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.getElementById("imagegallery"))
    {
        return false;
    }   
    var placeholder = document.createElement("img");
    placeholder.setAttribute("id","placeholder");
    placeholder.setAttribute("src","../img/2.jpeg");
    placeholder.setAttribute("alt","my image gallery");
    placeholder.setAttribute("style","width: 50%; height: 20%; margin-top: 20px;");
    var description = document.createElement("p");
    description.setAttribute("id","description");
    var desctext = document.createTextNode("Choose an image.");
    description.appendChild(desctext);
    var gallery = document.getElementById("imagegallery");
    insertAfter(placeholder,gallery);
    insertAfter(description,placeholder);
}

test.css:

body
{
    font-family:"Helvetica","Arial",serif;
    color: #333333;
    background-color: lightgoldenrodyellow;
    margin: 1em 10%;
}
h1
{
    color: #333333;
    background-color: transparent;
}
a
{
    color: #c60;
    background-color: transparent;
    font-weight: bold;
    text-decoration: none;
}
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;
}

4、JavaScript图片库截图:
这里写图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值