用面向对象的方法写"敲门砖"

简介: 一道名为"敲门砖"的面试题:用面向对象的方法写,点击列表内,子元素的子标签, 来删除子元素敲门砖考点:递归(删除标签, 需要找到列表的直属子标签, 需要通过递归层层往上找, parentNode)冒泡(只需为顶级父元素addEventListener绑定事件, 并通过e.

一道名为"敲门砖"的面试题:
用面向对象的方法写,点击列表内,子元素的子标签, 来删除子元素

敲门砖

考点:

  • 递归(删除标签, 需要找到列表的直属子标签, 需要通过递归层层往上找, parentNode)
  • 冒泡(只需为顶级父元素addEventListener绑定事件, 并通过e.target区分子标签, 即可实现一次绑定, 多次使用)
  • ES6语法(使用ES6的class 构造方法需要指明constructor函数)
  • 布局(使用网格布局,快速实现内联元素的两端对齐, justify-content: span-between)
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>阿里敲门砖</title>
    <style>
        li{
            list-style: none;
            display: flex;
            justify-content: space-between;
            align-items: center;
            background-color: #fdf6e3;
            border: 1px solid #0c8ac5;
            height: 100px;
            padding: 5px;
        
        }
        
        .del{
            border:1px solid #323232;
            color: #c03035;
        }
    </style>
</head>
<body>

    <ol class="list">
        <li><span class="desc">黄河之水</span><span class="del">X</span></li>
        <li><span class="desc">天上来</span><span class="del">X</span></li>
        <li><span class="desc">奔流</span><span class="del">X</span></li>
        <li><span class="desc">到海</span><span class="del">X</span></li>
        <li><span class="desc">不复回</span><span class="del">X</span></li>
        <li><span class="desc">君不见</span><span class="del">X</span></li>
        <li><span class="desc">高唐明镜</span><span class="del">X</span></li>
        <li><span class="desc">悲白发</span><span class="del">X</span></li>
    </ol>
    
    <ol class="list">
        <li><span class="desc">到海</span><span class="del">X</span></li>
        <li><span class="desc">不复回</span><span class="del">X</span></li>
        <li><span class="desc">天上来</span><span class="del">X</span></li>
        <li><span class="desc">奔流</span><span class="del">X</span></li>
        <li><span class="desc">君不见</span><span class="del">X</span></li>
        <li><span class="desc">黄河之水</span><span class="del">X</span></li>
        <li><span class="desc">高唐明镜</span><span class="del">X</span></li>
        <li><span class="desc">悲白发</span><span class="del">X</span></li>
    </ol>

    <script>
        


        class List{

            constructor(els){
                // 将this转换为局部变量self, 个人爱好Python3,这个写法类似Python3
                let self = this;

                // 根据类选择器,选择所有符合条件的的清单, 并生成列表
                let el = Array.from(document.querySelectorAll(els))
                // 为每个清单绑定事件
                el.forEach(item => item.addEventListener('click', function(e){
                    // 如果点击的元素的类名带有del, 则可以删除这条标签
                    if (e.target.className.indexOf('del') > -1){
                        // 移除相应的子元素
                        self.removeDom.call(self, item, e.target)
                    }

                }))
            
            }
            removeDom(item, tg){
                let self = this;
                // 设置移除判定函数
                let judgeRemoveDom = function(item, tg){
                    // 获取触发事件元素的父级元素
                    let parentNode = tg.parentNode;
                    // 如果当前找到的元素的父元素恰好为item, 则可以直接移除
                    if (item === parentNode){
                        item.removeChild(tg);
                    }
                    // 如果当前的父元素不是item, 则继续往上找
                    else{
                        tg = parentNode;
                        judgeRemoveDom(item, tg);
                    }
                }
                judgeRemoveDom(item, tg);
            }
        }
        window.addEventListener('DOMContentLoaded', function(){
            new List('.list')
        })


    </script>

</body>
</html>
目录
相关文章
|
7月前
|
算法 测试技术 开发者
编程范式之争:面向对象与函数式的较量
在当今软件开发领域,面向对象编程(OOP)和函数式编程(FP)是两种备受瞩目的主流编程范式。本文将比较这两种范式的特点和优势,并探讨如何在实际项目中进行选择。
|
7月前
|
设计模式
编程范式之争:面向对象编程与函数式编程的对决
在软件开发领域,面向对象编程(OOP)和函数式编程(FP)一直是两种主要的编程范式。本文将探讨这两种编程风格的优缺点,比较它们在不同场景下的适用性,并提供选择合适编程范式的指导原则。
63 0
|
6月前
|
Java
Java面向对象编程新篇章:多态,你准备好了吗?
【6月更文挑战第17天】Java的多态性是面向对象编程的核心,它允许通过统一的接口处理不同类型的对象。例如,在一个虚拟宠物游戏中,抽象类`Pet`定义了`speak()`方法,猫、狗和鹦鹉等子类各自重写此方法以实现独特叫声。在`main`方法中,使用`Pet`类型的引用创建子类对象并调用`speak()`,多态机制确保调用实际对象的方法,实现代码的灵活性和可扩展性。通过多态,我们能以更低的耦合度和更高的复用性编写更优雅的代码。
44 3
|
4月前
|
存储 数据处理
|
7月前
|
并行计算 数据处理 开发者
编程范式的抉择:面向对象编程与函数式编程的对决
在当今的软件开发领域,面向对象编程(Object-Oriented Programming,OOP)和函数式编程(Functional Programming,FP)是两种重要的编程范式。本文将比较并探讨这两种编程范式的特点、优势和适用场景,以帮助开发者在编程选择上做出明智的决策。
|
自然语言处理 搜索推荐 Java
重拾面向对象软件设计
软件设计的最大目标,就是降低复杂性,万物不为我所有,但万物皆为我用。引用 JDK 集合框架创办人 Josh Bloch 的一句话来结束。学习编程艺术首先要学会基本的规则,然后才能知道什么时候可以打破这些规则。
10936 12
重拾面向对象软件设计
|
JavaScript 前端开发 机器人
梦回战国,领略两千多年前公孙龙如何将面向对象运用得炉火纯青
2200 年前的战国时期,赵国平原君的食客公孙龙有一天骑着白马进城时,被守城的官兵以马不能进城而将其拦下.公孙龙当众即兴演讲,口述&quot;白马非马&quot;一论.守城的官兵被说的一愣一愣的,无法反驳。于是公孙龙就骑着他&#39;不是马的白马&#39;大摇大摆进城去了,这其实就是历史上最为经典的一次面向对象思维的阐述
28653 11
|
程序员 C++
当我学会了类,就离领悟面向对象编程不远了(基础)!!(熬夜爆肝)
当我学会了类,就离领悟面向对象编程不远了(基础)!!(熬夜爆肝)
144 0
当我学会了类,就离领悟面向对象编程不远了(基础)!!(熬夜爆肝)
|
设计模式 uml
重新认识面向对象(一)
重新认识面向对象(一)

相关实验场景

更多