《JavaScript DOM编程艺术》学习笔记

        一门编成语言,核心的语法只有一小部分;其他所有的高级特性要么借助于平台(如虚拟机),要么借助于内置其他语言包以核心语法为基础进行构建;所以学习编成语言,核心语法的学习至关重要;但是核心语法的学习,对于初学者来说,没有必要关注太细枝末节的东西,如果关注太过细致,则会导致对这门语言学习的信心的丧失。
        我个人在学习东西之前,都会去看一些别人提供的学习经验,学习路线图之类的东西,以期能够按着最快捷的方式入门;但是在入门java之前,我就因为在某乎看了别人的‘经验’,导致我拿着一本《java编成思想》作为入门书籍,看书看到我怀疑人生;有些人,他们有基础,有编程经验,有人指导,受过专业的训练,然后靠着类似于《java编成思想》之类的砖头书入门,然后他推荐给别人学习的时候也是这一套,他认为别人也可以靠着这样入门,殊不知别人可能没有他那么扎实的基础,也没有那么多的编程经验。
        学习任何东西,都应该是首先对整个知识体系有一个大概的了解,快速入门,多实践;然后依靠后续的长期的积累,去向知识体系中不断地填补细节的东西,而不应该是一上来就要学清楚每个细节;这也是我们面对任何一件复杂的事情时所应该采取的处理方式。
        我起初学习javascript使用的是《javascript权威指南》,看了服务端语言核心部分,讲的很清楚,但是太细节了,于我而言,书太厚了;所以在熟悉了语法规则后,我就选择使用《Javascript DOM编成艺术》这本书作为我后续的学习材料;这本书确实很好,我读了前面十章,此书以实践为导向,展示了如何操作文档;以下是我学习时做的一点笔记。

        前面写这么多,其实都是我的反思,我当初看《java编程思想》,现在回想起来,我是被经验帖坑了。

1.查找节点:
    document.getElementById()
    document.getElementsByTagName()
    element.getAttribute()
    element.firstChild
    element.lastChild
    element.childeNodes
    elment.firstChild.nodeType
2.修改已经存在节点属性
    element.setAttribute()
    element.firstChild.nodeValue
3.编程习惯
    预留退路
    分离javascript
    向后兼容
    对象检查
4.节点增加和删除
    document.write()
       缺点:无法做到分离javascript,必须在页面中调用才可
             只适用于HTML文档
    innerHtml
       缺点:只适用于HTML文档,非标准
            可以实现分离javascript
    createElement()
    创建元素节点
    createTextNode()
    创建文本节点
    appendChild()
    为节点添加子节点;节点树可由此方法进行组装;
    insertBefore()
    把一个新元素插入到一个现有元素的前面。
    parentElement.inserBefore(newElement,targetElement);
5.javascript操作CSS
     i)DOM style属性获取样式信息:
        var property = element.style.property
可以获取返回HTML内嵌css,如果将css放在样式文件中,则无法通过此方式获取(在外部样式表中和文档的<head>部分提供的css不能进入style属性中,所以无法通过此方式获取),但是如果使用DOM设置了样式信息,就可以使用DOM style属性将这些设置的样式信息再次获取出来。
        其中:property的某些字段表示与css中的不同,无论css中用多好连字符,在property中都使用驼峰方式表示,比如:css中font-familly  在property中则使用element.style.fontFamilly来获取;此外,某些字段获取到的值与css中的值的表示单位可能不同,如color,css中使用颜色编码,但是获取得到的时RGB表示。
     ii)DOM style属性设置样式信息:
        element.style.property = value; //value必须是字符串,否则运行会出错。
        在什么情况下应该使用DOM style属性设置样式信息:
                需要根据元素在节点树中的位置来设置样式信息
  需要根据某种条件设置样式信息
  对事件做出响应——某个事件触发样式改变
  改变一个元素的className,而不是改变它的行内嵌样式*(如果该元素已经存在样式表,则可以使用字符串拼接的方式设置叠加样式)

常用代码:

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

}

function moveElement(elementID,final_x,final_y,interval)
{
    if(!document.getElementById) return false;
    if(!document.getElementById(elementID)) return false;
    var elem = document.getElementById(elementID);
    var xpos = parseInt(elem.style.left);
    var ypos = parseInt(elem.style.top);
    if(xpos === final_x && ypos === final_y) return true;
    xpos>final_x ? xpos-- : xpos++;
    ypos>final_y ? ypos-- : ypos++;
    elem.style.left = `${xpos}px`;
    elem.style.top = `${ypos}px`;
    var repeat = `moveElement('${elementID}',${final_x},${final_y},${interval})`;
    var clearMoveMent = setTimeout(repeat,interval);
}
function addClass(element,value)
{
    if(!element.className)
    {
        element.className = value;
    }
    else
    {
        element.className = `${element.className} ${value}`;
    }
}

/**
 * 在某个元素之后插入新元素
 * @param newElement
 * @param targetElement
 */
function insertAfter(newElement,targetElement)
{
    if(!newElement || !targetElement) return false;
    var parentElement = targetElement.parentNode;
    if(parentElement.lastChild === targetElement)
    {
        parentElement.appendChild(newElement);
    }
    else
    {
        parentElement.insertBefore(newElement,targetElement.nextSibling);
    }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值