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

简介: 一道名为"敲门砖"的面试题:用面向对象的方法写,点击列表内,子元素的子标签, 来删除子元素敲门砖考点:递归(删除标签, 需要找到列表的直属子标签, 需要通过递归层层往上找, 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>
目录
相关文章
|
1月前
|
存储 编译器 数据安全/隐私保护
【软件设计师备考 专题 】面向对象开发方法:理解类、对象和封装
【软件设计师备考 专题 】面向对象开发方法:理解类、对象和封装
53 0
|
3月前
|
算法 测试技术 开发者
编程范式之争:面向对象与函数式的较量
在当今软件开发领域,面向对象编程(OOP)和函数式编程(FP)是两种备受瞩目的主流编程范式。本文将比较这两种范式的特点和优势,并探讨如何在实际项目中进行选择。
|
3月前
|
设计模式
编程范式之争:面向对象编程与函数式编程的对决
在软件开发领域,面向对象编程(OOP)和函数式编程(FP)一直是两种主要的编程范式。本文将探讨这两种编程风格的优缺点,比较它们在不同场景下的适用性,并提供选择合适编程范式的指导原则。
22 0
|
1天前
|
机器学习/深度学习 算法 Java
【专栏】编程范式之争:面向对象与函数式的较量
【4月更文挑战第27天】本文探讨了两种主要编程范式——面向对象编程(OOP)和函数式编程(FP)。OOP通过对象和类实现软件设计,强调封装、继承和多态,但过度继承可能导致复杂性。FP基于数学函数,注重无副作用和不可变性,提供高阶函数等特性,简化并发处理,但学习曲线较陡峭。选择编程范式应考虑项目需求和技术背景,现代语言趋向融合多种范式,如Java和Scala。理解各种范式的优缺点对开发者适应技术环境和解决问题至关重要。
|
1月前
|
前端开发 JavaScript PHP
【软件设计师备考 专题 】类程序设计语言主要特点和适用情况
【软件设计师备考 专题 】类程序设计语言主要特点和适用情况
48 1
|
2月前
|
算法
【编程技巧】精通编程的秘密武器:高效编程技巧揭秘!
【编程技巧】精通编程的秘密武器:高效编程技巧揭秘!
21 0
|
3月前
|
并行计算 数据处理 开发者
编程范式的抉择:面向对象编程与函数式编程的对决
在当今的软件开发领域,面向对象编程(Object-Oriented Programming,OOP)和函数式编程(Functional Programming,FP)是两种重要的编程范式。本文将比较并探讨这两种编程范式的特点、优势和适用场景,以帮助开发者在编程选择上做出明智的决策。
|
3月前
|
前端开发 JavaScript Go
写了2年前端从来不用面向对象?
写了2年前端从来不用面向对象?
|
10月前
|
前端开发 JavaScript Go
🤔写了2年前端从来不用面向对象?
对比错误实现和正确实现的代码示例,展示了面向组合的设计方式如何使代码更加干净、可复用,并提升了维护性和灵活性。
89 1

相关实验场景

更多