JavaScript设计模式(二十五):语言翻译-解释器模式

简介: 语言翻译-解释器模式

解释器模式(Interpreter)

对于一种语言,给出其文法表示形式,并定义一种解释器,通过使用这种解释器来解释语言中定义的句子。

需求:描述带有点击事件的DOM元素在页面中的位置

image.png

<!doctype html>
<html lang="zh-cn">

<head>
    <meta charset="UTF-8">
    <meta name="viewport"
        content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>语言翻译-解释器模式</title>
</head>
<style>
    * {
    
    
        margin: 15px;
        border: 3px solid #333;
    }

    *:nth-child(2n) {
    
    
        border-color: red;
    }

    *:nth-child(2n + 1) {
    
    
        border-color: orange;
    }
</style>

<body>
    <div>
        <div>
            <div>
                <button onclick="Interpreter(this)">【HTML &gt; HEAD|BODY &gt; DIV &gt; DIV &gt; DIV &gt; BUTTON】</button>
            </div>
            <div>
                <button onclick="Interpreter(this)">【HTML &gt; HEAD|BODY &gt; DIV &gt; DIV &gt; DIV|DIV &gt; BUTTON】</button>
            </div>
        </div>
    </div>
    <ul>
        <li>
            <button onclick="Interpreter(this)">【HTML &gt; HEAD|BODY &gt; DIV|UL &gt; LI &gt; BUTTON】</button>
        </li>
        <li>
            <button onclick="Interpreter(this)">【HTML &gt; HEAD|BODY &gt; DIV|UL &gt; LI|LI &gt; BUTTON】</button>
        </li>
        <li>
            <button onclick="Interpreter(this)">【HTML &gt; HEAD|BODY &gt; DIV|UL &gt; LI|LI|LI &gt; BUTTON】</button>
        </li>
    </ul>
    <div>
        <button onclick="Interpreter(this)">【HTML &gt; HEAD|BODY &gt; DIV|UL|DIV &gt; BUTTON】</button>
        <button onclick="Interpreter(this)">【HTML &gt; HEAD|BODY &gt; DIV|UL|DIV &gt; BUTTON|BUTTON】</button>
        <p onclick="Interpreter(this)" style="text-align: center;">【HTML &gt; HEAD|BODY &gt; DIV|UL|DIV &gt; BUTTON|BUTTON|P】</p>
    </div>
    <script src="./index.js"></script>
</body>

</html>
// XPath 解释器
const Interpreter = (function () {
   
   

    /**
     * 获取兄弟元素的nodeName
     * @param {HTMLElement} node DOM元素
     */
    function getSublingName(node) {
   
   
        let names = [];
        while (node) {
   
   
            if (node.nodeType === 1)
                names = [node.nodeName, ...names];
            node = node.previousSibling;
        }
        console.log(names.join('|'));
        return names.join('|');
    }

    /**
     * 解释器方法
     */
    return function (node) {
   
   
        let path = [];
        while (node) {
   
   
            if (node.nodeType === 1) {
   
   
                path = [getSublingName(node), ...path]
            }
            node = node.parentNode;
        }
        console.log(path.join('>'));
        return path.join('>');
    };
}());
目录
相关文章
|
3月前
|
前端开发 JavaScript 开发者
JavaScript:无处不在的Web语言
JavaScript:无处不在的Web语言
|
9月前
|
JSON 自然语言处理 前端开发
【01】对APP进行语言包功能开发-APP自动识别地区ip后分配对应的语言功能复杂吗?-成熟app项目语言包功能定制开发-前端以uniapp-基于vue.js后端以laravel基于php为例项目实战-优雅草卓伊凡
【01】对APP进行语言包功能开发-APP自动识别地区ip后分配对应的语言功能复杂吗?-成熟app项目语言包功能定制开发-前端以uniapp-基于vue.js后端以laravel基于php为例项目实战-优雅草卓伊凡
525 72
【01】对APP进行语言包功能开发-APP自动识别地区ip后分配对应的语言功能复杂吗?-成熟app项目语言包功能定制开发-前端以uniapp-基于vue.js后端以laravel基于php为例项目实战-优雅草卓伊凡
|
7月前
|
设计模式 Java 编译器
【设计模式】【行为型模式】解释器模式(Interpreter)
一、入门 什么是解释器模式? 解释器模式(Interpreter Pattern)是一种行为设计模式,用于定义语言的语法表示,并提供一个解释器来处理该语法。它通常用于需要解释和执行特定语言或表达式的场
202 11
|
设计模式 JavaScript 前端开发
JavaScript设计模式--访问者模式
【10月更文挑战第1天】
312 124
|
9月前
|
设计模式 SQL Java
【再谈设计模式】解释器模式~语法的解析执行者
解释器模式定义了一种语言的语法表示,并定义一个解释器来解释该语言中的句子。它使用类来表示每个语法规则,并且通过递归调用这些类的方法来解释表达式。本质上,它将一个复杂的表达式分解为一系列简单的部分,然后按照特定的语法规则进行解析和执行。
277 8
|
10月前
|
设计模式 JavaScript 算法
浅谈几种js设计模式
设计模式是软件开发中的宝贵工具,能够提高代码的可维护性和扩展性。通过单例模式、工厂模式、观察者模式和策略模式,我们可以解决不同场景下的实际问题,编写更加优雅和高效的代码。
324 8
|
设计模式 前端开发 JavaScript
JavaScript设计模式及其在实战中的应用,涵盖单例、工厂、观察者、装饰器和策略模式
本文深入探讨了JavaScript设计模式及其在实战中的应用,涵盖单例、工厂、观察者、装饰器和策略模式,结合电商网站案例,展示了设计模式如何提升代码的可维护性、扩展性和可读性,强调了其在前端开发中的重要性。
194 2
|
JSON 前端开发 JavaScript
聊聊 Go 语言中的 JSON 序列化与 js 前端交互类型失真问题
在Web开发中,后端与前端的数据交换常使用JSON格式,但JavaScript的数字类型仅能安全处理-2^53到2^53间的整数,超出此范围会导致精度丢失。本文通过Go语言的`encoding/json`包,介绍如何通过将大整数以字符串形式序列化和反序列化,有效解决这一问题,确保前后端数据交换的准确性。
358 4
|
XML 监控 JavaScript
JavaScript 语言对企业上网监控的技术支持
在数字化企业环境中,上网监控对企业信息安全和提升员工效率至关重要。JavaScript 作为广泛应用的脚本语言,提供了强大的技术支持,包括数据获取与分析、与服务器端交互、监控页面加载时间和网络活动,助力企业有效管理上网行为,保障信息安全。
128 6
|
设计模式 存储 缓存
Java设计模式 - 解释器模式(24)
Java设计模式 - 解释器模式(24)
161 1