JS学习之DOM节点的关系属性封装、克隆节点、Dom中Style常用的一些属性等小结

JS DOM节点:

在JS DOM中节点的关系被定义为节点的属性:

通常有以下几种节点之间的关系:

(这里的关系是所有浏览器都支持的)

  • parentNode    父节点
  • childNodes    子节点
  • firstChild    父节点里的第一个子节点
  • lastChild     父节点里的最后一个子节点
  • nextSibling    与子节点并列的下一个兄弟节点
  • previousSibling   与子节点并列的上一个兄弟节点

火狐与谷歌支持而ie8不支持的节点关系有:

previousElementSibling
nextElementSibling
firstElementChild
lastElementChild

在实际工作中,我们可以对这些ie8不支持,但是谷歌与火狐都支持的节点属性进行封装,使他们能够在各个浏览器中都能够兼容。

4个封装实例:

/**
 * 获得当前对象的上一个标签元素
 * @param obj
 * @returns {*}
 */
function getPreviousSibling(obj){
    if(obj.previousElementSibling){  // previousElementSibling能够直接获得上一个兄弟标签节点
        return obj.previousElementSibling;
    }else {
        var node = obj.previousSibling;//是所有的浏览器都支持的,但是得判断节点类型,previousSibling不能直接获得类型为标签的元素,所以需要判断它的节点类型。
        while(node&&node.nodeType!=1){ //判断节点上一个节点是否存在与节点的类型是否是标签类型,如果不是就使用while循环继续循环判断节点直到获得为止
            node = node.previousSibling;
        }
        return node;  //将找到的标签节点返回
    }
}
/**
 * 获取当前元素的兄弟标签节点的函数
 * @param obj
 * @returns {*}
 */
function getNextSibling(obj){
    if(obj.nextElementSibling){ // 火狐谷歌都支持的,只会获得标签兄弟节点,IE8不支持
        return  obj.nextElementSibling;
    }else {
        var node = obj.nextSibling;// nextSibling是所有的浏览器都会支持的,但是会获得文本节点,IE8及之前的浏览器会忽略空白文本节点
        while(node&&node.nodeType!=1){
            node = node.nextSibling;
        }
        return node;
    }
}

/**
 * 获得兼容性的当前对象的第一个子标签节点
 * @param obj
 * @returns {*}
 */
function getFirstChild(obj){
    if(obj.firstElementChild){
        return obj.firstElementChild;//将获取到的第一个子节点元素返回
    }else {
        var node = obj.firstChild;//获得当前对象的第一个子节点,但是这个节点有可能是文本节点
        while(node&&node.nodeType!=1){
            node = node.nextSibling;
        }
        return node;
    }
}

/**
 * 获得当前对象的最后一个子标签节点
 * @param obj
 * @returns {*}
 */
function getLastChild(obj){
    if(obj.lastElementChild){
        return obj.lastElementChild;
    }else {
        var node = obj.lastChild;
        while(node&&node.nodeType!=1){
            node = node.previousSibling;//当前对象的上一个兄弟姊妹节点
        }
        return node;
    }
}

克隆节点:

cloneNode(true) 这种情况是表示克隆节点的所有内容(标签+标签里的内容);

cloneNode(false) 这种情况是仅仅表示克隆了节点的标签;

例:

<body>
<ul id="list">
    <li>111111</li>
    <li>222222</li>
    <li id="li3">333333</li>
    <li>444444</li>
</ul>
<script>
    var ul = document.getElementById("list");
    var li = document.getElementById("li3");
    console.log(li.cloneNode(false)); //如果是False的话,仅仅是相当于复制(克隆)了一个标签
    console.log(li.cloneNode(true));// 将li标签原样克隆,包含里面的一切信息,包括子节点
    console.log(ul.cloneNode(false));
    console.log(ul.cloneNode(true));

    // 参数为True的时候,是深度克隆,克隆当前对象的一切子节点
    // 参数为false的时候,是浅克隆,只会克隆标签,不包含文本信息
</script>

Dom中Style常用的一些属性:

display(none/block):控制元素的显示,不占据原来在标准流中的位置;

visibility(visible/hidden):控制元素的显示,占据原来在标准流之中的位置

backgroundColor: 控制元素的背景颜色

backgroundImage: 控制元素背景图片的路径

color:  控制前景颜色

width:控制元素的宽度

height:控制元素的高度

border:控制边框的属性

position:控制元素使用何种定位

left/top:控制元素的定位之后的偏移(注意最后不要忘记带上单位px)

box.style.position="absolute";
box.style.left="200px";

zIndex:控制元素的层级(案例:许愿墙点击哪个卡片哪个在最上面显示)

filter:控制元素的透明度(ie8支持)

box.style.filter="alpha(opacity=30)";

而火狐与谷歌支持的是:

box.style.backgroundColor="rgba(120,120,120,.3)";

补充:下拉列表中<option></option>的selected属性

selected 属性可设置或返回选项的 selected 属性的值。

该属性设置选项的当前状态,如果为 true,则该选项被选中。该属性的初始值来自 <option> 的 selected 属性。

抽奖案例:
<body>
<select name="" id="sel">
    <option value="">一等奖</option>
    <option value="">二等奖</option>
    <option value="">三等奖</option>
    <option value="">四等奖</option>
    <option value="">五等奖</option>
    <option value="">六等奖</option>
    <option value="">七等奖</option>
    <option value="">八等奖</option>
    <option value="">九等奖</option>
</select>
<input type="button" value="抽奖" id="btn"/>
<script>
   var sel=document.getElementById("sel");
    var options=sel.children;
    var btn=document.getElementById("btn");
    btn.onclick=function(){
        var index=Math.floor(Math.random()*options.length);
        options[index].selected=true;
    }
</script>

在 DOM 中,属性也是节点。与元素节点不同,属性节点拥有文本值。

获取属性的值的方法,就是获取它的文本值。

getAttribute() 方法返回属性的值。

getAttributeNode() 方法返回属性节点。

setAttribute() 方法用于改变属性的值或创建新属性。

removeAttribute() 方法删除指定属性。

createElement() 方法创建新的元素节点;

appendChild() 方法可向节点的子节点列表的末尾添加新的子节点。

removeChild() 方法删除指定节点。当一个节点被删除时,其所有子节点也会被删除。

insertBefore() 方法用于在指定的子节点之前插入节点。在被添加的节点的位置很重要时,此方法很有用。

replaceChild() 方法用其他节点替换某个子节点。如成功,该方法返回被替换的节点,如失败,则返回 null。

时间: 2024-08-02 07:01:51

JS学习之DOM节点的关系属性封装、克隆节点、Dom中Style常用的一些属性等小结的相关文章

HTML笔记二,HTML中的常用元素与属性(2)

语义相关元素 <mark>:用于显示关注的内容,通常用黄色显示 <time>:显示被标注内容是日期,时间等信息 两个特殊功能的元素 <meter>:用于表示一个已知最大最小值的计数仪器 value:指定计数仪器的当前值 min:指定计数仪器的最小值 max:指定计数仪器的最大值 low:指定计数仪器指定范围的最小值 high:指定计数仪器指定范围的最大值 optimum:指定计数仪器有效范围的最佳值 <progress>:用于表示一个进度条 max:指定进度

熟悉JS中的常用选择器及属性、方法的调用

选择器.属性及方法调用的配合使用: <style>            #a{                width: 200px;                height: 100px;                background-color: red;                            }            .b{                width: 200px;                height: 100px;         

【Node.js学习笔记三】什么是Node封装模块?(Node Packaged Module.module)

Node封装模块是一个打包的库,它可以很容易的在不同的项目中被共享.重用和安装. 有很多可用于多种用途的不同模块. 例如: Mongoose模块为MongoDB提供了一个ODM Express扩展了Node的HTTP功能 Node.js模块由不同的第三方机构创建,提供现有Node.js所缺乏的重要功能. 每个Node封装模块包含一个 package.json文件,该文件包含元素数据信息,如: 名称 版本 作者 贡献者 以及控制元数据,比如依赖和执行诸如安装与发布动作时,Node包管理器将使用的其

js学习随笔一:对象简单、深度克隆(复制)

javascript的一切实例都是对象,只是对象之间稍有不同,分为原始类型和合成类型.原始类型对象指的是字符串(String).数值(Number).布尔值(Boolean),合成类型对象指的是数组(Array).对象(Object).函数(Function). 既然对象分为这两类,他们之间的最大差别是复制克隆的差别.普通对象存储的是对象的实际数据,而引用对象存储的是对象的引用地址,而把对象的实际内容单独存放,因为引用对象通常比较庞大,这是数据开销和内存开销优化的手段.通常初学者很难理解这部分内

关于那些Android中不常用的设置属性

很多在manifest中的属性我们经常遗忘了它们,或者经常看到但又不是很明白它的作用.那么在这里我就拿了一些属性简单的解释一下,防止以后碰到却不知道其中的意思.不是很全,以后会断断续续的补充吧 一.android:installLocation="internalOnly"android:installLocation隶属于AndroidManifest.XML中的manifest节点.如下所示: <manifest xmlns:android="http://sche

html中一些常用标签及属性

html中标签分为块级标签和行级标签 块级标签常用的有 <div> <p> <h1><hr><pre><table><ul><ol> 行级标签常用的有 <span> <strong> <i> <em><b><sub><sup><br> 一.字体设置 <font></font> 属性有size设

[原创]java WEB学习笔记87:Hibernate学习之路-- -映射 继承关系(subclass , joined-subclass,union-subclass )

本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱好者,互联网技术发烧友 微博:伊直都在0221 QQ:951226918 -----------------------------------------------------------------------------------------------------------------

Redis集群节点主从关系调整

一.概述 Redis集群创建后,可能会出现互为主从关系的节点从属于同一台服务器的情况.在此种情况下,若 服务器故障宕机或需要停机维护,互为主从关系的节点同时停止运行,导致redis集群暂时失去一部 分slot插槽.此时,redis集群为fail状态,对其进行的数据读写操作均无法正常进行.为避免此种情 况的发生,应对redis集群节点的主从关系进行调整,使互为主从关系的节点分属于不同的服务器. 二.调整方法描述 1.使用redis-trib.rb脚本将待调整的从节点从redis集群中删除.(执行此

javascript中字符串常用操作总结、JS字符串操作大全

字符串的操作在js中非常频繁,也非常重要.以往看完书之后都能记得非常清楚,但稍微隔一段时间不用,便会忘得差不多,记性不好是硬伤啊...今天就对字符串的一些常用操作做个整理,一者加深印象,二者方便今后温习查阅. String对象属性 (1) length属性 length算是字符串中非常常用的一个属性了,它的功能是获取字符串的长度.当然需要注意的是js中的中文每个汉字也只代表一个字符,这里可能跟其他语言有些不一样. var str = 'abc'; console.log(str.length);