资讯专栏INFORMATION COLUMN

JavaScript常用脚本集锦5

joywek / 317人阅读

摘要:代码来源一些常用的操作方法介绍查找相关元素的前一个兄弟元素的方法。查找元素指定层级的父元素。

DOM操作的增强版功能函数
/**
 * 将一个DOM节点、HTML字符串混合型参数
 * 转化为原生的DOM节点数组
 *
 * */
function checkElem(a) {
    var r = [];

    if (a.constructor != Array) {
        //如果不是参数数组,则强行转换
        a = [a];
    }

    for (var i = 0; i < a.length; i++) {
        //如果是字符串,例如"
  • aa
  • " if (a[i].constructor == String) { //使用一个临时元素来存放HTML var div = document.createElement("div"); //注入HTML,转换成DOM结构 div.innerHTML = a[i]; for (var j = 0; j < div.childNodes.length; j++) { r[r.length] = div.childNodes[j]; } } else if (a[i].length) { //假定是DOM节点数组 for (var j = 0; j < a[i].length; j++) { r[r.length] = a[i][j]; } } else { //DOM节点 r[r.length] = a[i]; } } return r; } /** * 在parent执行环境下,在before元素下前面添加elem元素 * */ function before(parent, before, elem) { //检查是否提供parent节点参数 if (elem == null) { elem = before; before = parent; parent = before.parentNode; } //获取元素的新数组 var elems = checkElem(elem); /** * 向后遍历数组, * 因为我们向前插入元素 * */ for (var i = elems.length - 1; i >= 0; i--) { parent.insertBefore(elem[i], before); } } /** * 为parent追加一个子元素的辅助函数 * * */ function append(parent, elem) { var elems = checkElem(elem); for(var i = 0; i <= elems.length; i++){ parent.appendChild(elems[i]); } } /** * 删除elem节点函数 * * */ function remove(elem) { if(elem) { elem.parentNode.removeChild(elem); } } /** * 从一个元素中删除所有子节点的函数 * * */ function empty(elem) { while(elem.firstChild) { remove(elem.firstChild); } }

    代码来源:https://gist.github.com/hehongwei44/31ce781d77ca33baea48

    创建DOM元素的通用函数
    /*创建DOM元素的通用函数*/
    function create (elem) {
        return document.createElementNS ? document.createElementNS("http://" +
            "www.w3.org/1999/xhtml", elem) : document.createElement(elem);
    }
    
    //如果提供的是字符串,则把它转化成文本节点.
    function checkElem(elem) {
        return elem && elem.constructor == "String" ? document.createTextNode(elem) : elem;
    }
    
    //在parent执行环境下,在before元素下前面添加elem元素
    function before(parent, before, elem){
        /*
        * 如果不提供parent的情况下,则before接受parent参数,elem接受before的参数。
        * ps:该方法处理很独特,值得借鉴
        * */
        if(elem == null) {
            elem = before;
            before = parent;
            parent = before.parent;
        }
    
        parent.insertBefore(checkElem(elem),before);
    }
    
    //为parent追加一个子元素的辅助函数
    function append(parent, elem){
        parent.appendChild(elem);
    }
    

    代码来源:https://gist.github.com/hehongwei44/b449b9081b00bc1dc6ac

    检查元素是否有一个指定的特性
    /*检查元素是否有一个指定的特性*/
    function hasAttribute(elem, name) {
        // !!表达式快速的求bool值
        return !!elem.getAttribute(name);
    }
    

    代码来源:https://gist.github.com/hehongwei44/fb9789ef08a2ef9c7ec3

    获取元素文本内容的通用函数
    /*获取元素文本内容的通用函数*/
    function text(e) {
        var str = "";
        //判断元素是否包含子元素
        e = e.childNodes || e;
    
        //遍历子元素,获取其文本内容
        for (var i = 0; i < e.length; i++) {
            //如果子元素下面还包含子元素,则递归执行
            str += e[i].nodeType != 1 ? (e[i].nodeValue) : text(e[i].childNodes);
        }
    
        return str;
    }
    

    代码来源:https://gist.github.com/hehongwei44/08429d872a5f19ca7d6b

    简单的DOM的API封装
    /*根据ID获取元素*/
    var $id = function(id){
        return document.getElementById(id);
    };
    
    /*根据标签名获取元素,返回元素的节点伪数组*/
    var $tag = function(tagName, parent){
        return (parent || document).getElementsByTagName(tagName);
    };
     /*根据样式名获取元素,返回元素的节点数组。其中className是必填项目*/
    var $class = function (className, tagName, parent) {
    
        //元素可能存在多个className,故匹配我们所需要的className
        var re = new RegExp("(^|s)" + className + "(s|$)"), node = [];
    
        if (arguments.length === 1) {
            //只传入className
            tagName = "*";
            parent = document;
    
        } else if (arguments.length === 2 && tagName.constructor === "String") {
            //传入ClassName和节点类型
            parent = document;
    
        } else if (arguments.length === 2 && tagName.constructor !== "String") {
            //传入ClassName和父亲节点
            tagName = "*"
    
        } else if (arguments.length === 3) {
            //传入ClassName和节点类型以及父亲节点
        }
    
        var nodebyTag = parent.getElementsByTagName(tagName);
    
        for (var i = 0; i < nodebyTag.length; i++) {
    
            if (re.test(nodebyTag[i].className)) {
                node.push(nodebyTag[i]);
            }
        }
    
        return node;
    
    }
    

    代码来源:https://gist.github.com/hehongwei44/d608126f5b3407220932

    通过原型拓展来实现DOM的查找方法。
    //查找相关元素的前一个兄弟元素的方法。
    HTMLElement.prototype.prev = function () {
        var elem = this;
        do {
            elem = elem.previousSibling;
        } while (elem && elem.nodeType != 1);
    
        return elem;
    };
    
    //查找相关元素的下一个兄弟元素的方法。
    HTMLElement.prototype.next = function () {
        var elem = this;
    
        do {
            elem = elem.nextSibling;
        } while (elem && elem.nodeType != 1);
    
        return elem;
    };
    
    //查找元素第一个子元素的方法。
    HTMLElement.prototype.first = function () {
        var elem = this.firstChild;
        //文本节点
        if(elem && elem.nodeType != 1){
            do {
                elem = elem.nextSibling;
            } while (elem && elem.nodeType != 1);
        }
    
        return elem;
    };
    
    //查找元素的最后一个子元素的方法。
    HTMLElement.prototype.last = function () {
        var elem = this.lastChild;
    
        do {
            elem = elem.previousSibling;
        } while (elem && elem.nodeType != 1);
    
        return elem;
    };
    
    //查找元素指定层级的父元素。
    HTMLElement.prototype.parent = function (num){
        var elem = this;
        num = num || 1;
        for( var i = 0; i < num; i++)
            if(elem != null) elem = elem.parentNode;
        return elem;
    };
    

    代码来源:https://gist.github.com/hehongwei44/7614a218810410b31ff4

    dom一些常用的操作方法介绍
    //查找相关元素的前一个兄弟元素的方法。
    function prev(elem) {
        do {
            elem = elem.previousSibling;
        } while (elem && elem.nodeType != 1);
    
        return elem;
    }
    //查找相关元素的下一个兄弟元素的方法。
    function next(elem) {
        do {
            elem = elem.nextSibling;
        } while (elem && elem.nodeType != 1);
    
        return elem;
    }
    //查找元素第一个子元素的方法。
    function first(elem) {
        elem = elem.firstChild;
    
        return (elem && elem.nodeType != 1) ? next(elem) : elem;
    }
    //查找元素的最后一个子元素的方法。
    function last(elem) {
        elem = elem.lastChild;
    
        return (elem && elem.nodeType != 1) ? prev(elem) : elem;
    }
    //查找元素指定层级的父元素。
    function parent(elem, num){
        num = num || 1;
        for( var i = 0; i < num; i++)
            if(elem != null) elem = elem.parentNode;
        return elem;
    }
    

    代码来源:https://gist.github.com/hehongwei44/11e82b38b00aa63b0876

    文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

    转载请注明本文地址:https://www.ucloud.cn/yun/87692.html

    相关文章

    • JavaScript常用脚本集锦2

      摘要:把中的伪数组转换为真数组在中,函数中的隐藏变量和用获得的元素集合都不是真正的数组,不能使用等方法,在有这种需要的时候只能先转换为真正的数组。检测元素是否支持某个属性代码用法创建和使用命名空间使用方式 把JavaScript中的伪数组转换为真数组 在 JavaScript 中, 函数中的隐藏变量 arguments 和用 getElementsByTagName 获得的元素集合(Nod...

      xialong 评论0 收藏0
    • JavaScript常用脚本集锦3

      通过数组,拓展字符串拼接容易导致性能的问题 function StringBuffer() { this.__strings__ = new Array(); } StringBuffer.prototype.append = function (str) { this.__strings__.push(str); return this; } StringBuffer....

      dack 评论0 收藏0
    • JavaScript常用脚本集锦6

      摘要:它会指出一个类是继承自另一个类的。测试测试代码来源页面倒计时的一段运用倒计时的一段脚本。截止日期符合日期格式,比如等有效日期。截止的天数小时分钟秒数组成的对象。 清楚节点内的空格 function cleanWhitespace(element) { //如果不提供参数,则处理整个HTML文档 element = element || document; //...

      Acceml 评论0 收藏0
    • JavaScript常用脚本集锦1

      摘要:初始化参数可选参数,必填参数可选,只有在请求时需要参数可选回调函数可选参数可选,默认为参数可选,默认为创建引擎对象打开发送普通文本接收文档将字符串转换为对象最后,说明一下此函数的用法。即等待与成功回调,后标志位置为。 jquery限制文本框只能输入数字 jquery限制文本框只能输入数字,兼容IE、chrome、FF(表现效果不一样),示例代码如下: $(input).keyup(...

      ygyooo 评论0 收藏0
    • JavaScript常用脚本集锦8

      摘要:进制为代码来源通过标签解析通过标签解析标签参数是字符串,解析的目标通过测试创建一个标签将赋值给标签的属性。协议主机名称端口查询字符串查询参数文件名哈希参数路径相对路径路径片段代码来源 图片预加载 // 更新: // 05.27: 1、保证回调执行顺序:error > ready > load;2、回调函数this指向img本身 // 04-02: 1、增加图片完全加载后的回调 2、提...

      blankyao 评论0 收藏0

    发表评论

    0条评论

    最新活动
    阅读需要支付1元查看
    <