美文网首页
15.项目 1-博客前端:封装库--CSS 选择器[上]

15.项目 1-博客前端:封装库--CSS 选择器[上]

作者: 好像在哪见过你丶 | 来源:发表于2019-05-15 09:21 被阅读0次

    学习要点:

    1.问题所在
    2.设置代码

    本节点,我们准备使用模拟 CSS 选择器的方式来模拟 JS 选择节点对象的方法。以便在
    之后的使用中更加的方便。

    一.问题所在

    在获取节点的时候,我们都需要通过 getId,getTagName,getClass 等繁琐的操作,虽然
    比原生的 JavaScript 获取简单了不少,但还是稍微有点繁琐,尤其在节点层次的问题上,就
    更加无能为例,有没有一种和 CSS 选择节点一样简便的方法呢,这节课我们就了解一下 CSS
    选择器的封装。

    二.设置代码

    //通过构造函数来传递节点
    if (typeof args == 'string') {
    switch (args.charAt(0)) {
    case '#' :
    this.elements.push(this.getId(args.substring(1)));
    break;
    case '.' :
    this.elements = this.getClass(args.substring(1));
    break;
    default :
    this.elements = this.getTagName(args);
    }
    }
    //获取 ID 节点
    Base.prototype.getId = function (id) {
    return document.getElementById(id);
    };
    //获取元素节点数组
    Base.prototype.getTagName = function (tag, parentNode) {
    var node = null;
    var temps = [];
    if (parentNode != undefined) {
    node = parentNode;
    } else {
    node = document;
    }
    var tags = node.getElementsByTagName(tag);
    for (var i = 0; i < tags.length; i ++) {
    temps.push(tags[i]);
    }
    return tags;
    };
    //获取 CLASS 节点数组
    Base.prototype.getClass = function (className, parentNode) {
    var node = null;
    var temps = [];
    if (parentNode != undefined) {
    node = parentNode;
    } else {
    node = document;
    }
    var all = node.getElementsByTagName('*');
    for (var i = 0; i < all.length; i ++) {
    if (all[i].className == className) {
    temps.push(all[i]);
    }
    }
    return temps;
    }
    //设置 CSS 选择器
    Base.prototype.find = function (str) {
    var childElements = [];
    for (var i = 0; i < this.elements.length; i ++) {
    switch (str.charAt(0)) {
    case '#' :
    childElements.push(this.getId(str.substring(1)));
    break;
    case '.' :
    var element = this.getClass(str.substring(1), this.elements[i]);
    for (var j = 0; j < element.length; j ++) {
    childElements.push(element[j]);
    }
    break;
    default :
    var element = this.getTagName(str, this.elements[i]);
    for (var j = 0; j < element.length; j ++) {
    childElements.push(element[j]);
    }
    }
    }
    this.elements = childElements;
    return this;
    };
    

    感谢收看本次教程!

    相关文章

      网友评论

          本文标题:15.项目 1-博客前端:封装库--CSS 选择器[上]

          本文链接:https://www.haomeiwen.com/subject/theuaqtx.html