0

0

HTML列表优化:使用JavaScript动态加载与渲染减少代码行数

心靈之曲

心靈之曲

发布时间:2025-12-12 16:10:12

|

796人浏览过

|

来源于php中文网

原创

HTML列表优化:使用JavaScript动态加载与渲染减少代码行数

针对包含大量重复或相似项的html列表,本教程提供两种客户端javascript优化策略。首先,通过将大型列表拆分为独立html文件并按需加载,实现代码模块化和主文件精简。其次,更进一步,利用javascript结合数据(如json)和模板动态生成列表项,从而彻底消除html中的重复结构,提升可维护性和性能。

引言:大型HTML列表的挑战

前端开发中,当需要展示包含大量重复或结构相似但内容不同的列表项时(例如,商品列表、图片画廊等),直接在HTML文件中硬编码所有<li>元素会导致代码行数急剧增加。一个拥有数十个列表、每个列表包含50-100个项的页面,其HTML代码量可能轻松达到数万行。这不仅使得HTML文件变得臃肿、难以管理和维护,还可能影响页面的初始加载性能。

例如,以下是一个典型的重复列表结构:

<div class="results">
    <ul id="classicList">
        <li class="collection-item">
            <a onclick="classicImage('classic-avalanche'); setClassicPrice(1275)">
                <div class="result-container">
                    <div class="result">
                        <img src="images/classic/classic_avalanche.png" class="windowimage" id="classic-avalanche">
                    </div>
                    <p class="skinname">Classic Avalanche</p>
                </div>
            </a>
        </li>
        <li class="collection-item">
            <a onclick="classicImage('classic-default'); setClassicPrice(0)">
                <div class="result-container">
                    <div class="result">
                        <img src="images/classic/classic_default.png" class="windowimage" id="classic-default">
                    </div>
                    <p class="skinname">Classic Default</p>
                </div>
            </a>
        </li>
        <!-- ... 更多类似的列表项 ... -->
    </ul>
</div>

面对这种挑战,我们可以借助JavaScript来优化HTML结构,减少代码冗余。

策略一:模块化加载HTML片段

当列表内容相对固定,但为了减少主HTML文件的行数和提高模块化程度时,可以将大型列表拆分成独立的HTML文件,然后使用JavaScript在页面加载时按需引入。这种方法将大型的HTML文件分解为更小的、易于管理的部分。

立即学习Java免费学习笔记(深入)”;

原理

将每个大型列表(或列表的一部分)保存为一个独立的.html文件(例如,classicList.html、shortyList.html),然后在主页面中使用JavaScript(如jQuery的.load()方法或原生fetch API)将其内容加载到指定的容器元素中。

优点

  • 减少主HTML文件大小: 初始加载的主HTML文件会更小,因为它只包含容器元素。
  • 提高代码组织性: 不同的列表内容存放在不同的文件中,便于管理和维护。
  • 按需加载: 理论上可以实现只加载用户需要的部分,但本例中是在页面加载时立即加载。

示例代码(使用jQuery .load())

假设我们有两个列表classicList和shortyList,它们的内容分别存储在classicList.html和shortyList.html中。

GentleAI
GentleAI

GentleAI是一个高效的AI工作平台,为普通人提供智能计算、简单易用的界面和专业技术支持。让人工智能服务每一个人。

下载

index.html (主页面)

<!DOCTYPE html>
<html>
<head>
    <title>动态加载列表示例</title>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.7.1/jquery.min.js"></script>
    <script>
        $(function(){
            // 加载 Classic 列表
            $("#classicListContainer").load("classicList.html");
            // 加载 Shorty 列表
            $("#shortyListContainer").load("shortyList.html");
        });
    </script>
    <style>
        /* 样式定义 */
        .imgcol2 { max-height: 75px; max-width: 150px; }
        .wname { width: 150px; }
        .windowimage { max-width: 100px; max-height: 100px; }
        .result-container { display: flex; align-items: center; margin-bottom: 5px; }
        .result { margin-right: 10px; }
        .skinname { margin: 0; font-size: 0.9em; }
        .collection-item { list-style: none; margin-bottom: 10px; border: 1px solid #eee; padding: 5px; }
        ul { padding: 0; }
        a { text-decoration: none; color: inherit; display: block; }
    </style>
</head>
<body>
    <a onclick="showClassic()">
        <div class="classic">
            <img src="images/classic/classic_default.png" class="imgcol2" id="classicimg" style="max-height: 75px; max-width: 150px;" >
            <div class="wname" style="width: 150px;">CLASSIC</div>
        </div>
    </a>
    <a onclick="showShorty()">
        <div class="shorty">
            <img src="images/shorty/shorty_default.png" class="imgcol2" id="shortyimg">
            <div class="wname" style="width: 150px;">SHORTY</div>
        </div>
    </a>

    <div class="results">
        <h2>Classic Items</h2>
        <ul id="classicListContainer">
            <!-- Classic 列表内容将加载到这里 -->
        </ul>
    </div>

    <div class="results">
        <h2>Shorty Items</h2>
        <ul id="shortyListContainer">
            <!-- Shorty 列表内容将加载到这里 -->
        </ul>
    </div>

    <script>
        // 假设这些函数在实际应用中已定义
        function showClassic() { console.log("显示 Classic 主区域"); }
        function showShorty() { console.log("显示 Shorty 主区域"); }
        function classicImage(id) {
            console.log('Setting classic image to:', id);
            // 实际逻辑:更新主显示区域的图片
            const mainClassicImg = document.getElementById('classicimg');
            const sourceImg = document.getElementById(id);
            if (mainClassicImg && sourceImg) {
                mainClassicImg.src = sourceImg.src;
            }
        }
        function setClassicPrice(price) { console.log('Setting classic price to:', price); }
        function shortyImage(id) {
            console.log('Setting shorty image to:', id);
            // 实际逻辑:更新主显示区域的图片
            const mainShortyImg = document.getElementById('shortyimg');
            const sourceImg = document.getElementById(id);
            if (mainShortyImg && sourceImg) {
                mainShortyImg.src = sourceImg.src;
            }
        }
        function setShortyPrice(price) { console.log('Setting shorty price to:', price); }
    </script>
</body>
</html>

classicList.html (仅包含列表项)

<li class="collection-item">
    <a onclick="classicImage('classic-avalanche'); setClassicPrice(1275)">
        <div class="result-container">
            <div class="result">
                <img src="images/classic/classic_avalanche.png" class="windowimage" id="classic-avalanche">
            </div>
            <p class="skinname">Classic Avalanche</p>
        </div>
    </a>
</li>
<li class="collection-item">
    <a onclick="classicImage('classic-default'); setClassicPrice(0)">
        <div class="result-container">
            <div class="result">
                <img src="images/classic/classic_default.png" class="windowimage" id="classic-default">
            </div>
            <p class="skinname">Classic Default</p>
        </div>
    </a>
</li>
<!-- 更多 Classic 列表项 -->

shortyList.html (仅包含列表项)

<li class="collection-item">
    <a onclick="shortyImage('shorty-aerosol'); setShortyPrice(0)">
        <div class="result-container">
            <div class="result">
                <img src="images/shorty/shorty_aerosol.png" class="windowimage" id="shorty-aerosol">
            </div>
            <p class="skinname">Shorty Aerosol</p>
        </div>
    </a>
</li>
<li class="collection-item">
    <a onclick="shortyImage('shorty-default'); setShortyPrice(0)">
        <div class="result-container">
            <div class="result">
                <img src="images/shorty/shorty_default.png" class="windowimage" id="shorty-default">
            </div>
            <p class="skinname">Shorty Default</p>
        </div>
    </a>
</li>
<!-- 更多 Shorty 列表项 -->

这种方法虽然减少了主HTML文件的行数,但仍然需要为每个列表项编写完整的HTML结构。

策略二:利用JavaScript动态渲染列表

当列表项的结构高度相似,只有数据(如ID、图片源、文本、价格等)不同时,最彻底的优化方式是利用JavaScript结合数据源(如JSON)和模板来动态生成列表项。这种方法将数据与视图完全分离,极大地减少了HTML文件的冗余。

原理

  1. 数据分离: 将所有列表项的数据存储在一个结构化的数据源中,例如JSON文件或JavaScript数组。
  2. 模板定义: 在JavaScript中定义一个函数或模板字符串,用于根据单个数据项生成对应的HTML列表项结构。
  3. 动态渲染: 页面加载时,JavaScript获取数据,遍历每个数据项,使用模板生成HTML,然后将生成的HTML插入到DOM中。

优点

  • 彻底消除HTML冗余: HTML文件中不再包含重复的列表项结构,只留下一个空的容器元素。
  • 易于数据管理和更新: 只需修改JSON数据即可更新列表内容,无需触碰HTML结构。
  • 高度灵活: 可以根据数据动态改变列表项的显示方式或交互行为。
  • 提高可维护性: 数据、逻辑和视图模板分离,代码结构更清晰。

数据结构示例(classicData.json

[
    { "id": "classic-avalanche", "name": "Classic Avalanche", "price": 1275, "imagePath": "images/classic/classic_avalanche.png" },
    { "id": "classic-default", "name": "Classic Default", "price": 0, "imagePath": "images/classic/classic_default.png" },
    { "id": "classic-glacier", "name": "Classic Glacier", "price": 500, "imagePath": "images/classic/classic_glacier.png" }
    // ... 更多 Classic 列表项数据
]

JavaScript动态生成示例(Vanilla JS)

index.html (主页面)

<!DOCTYPE html>
<html>
<head>
    <title>动态渲染列表示例</title>
    <style>
        /* 样式定义,与策略一相同 */
        .imgcol2 { max-height: 75px; max-width: 150px; }
        .wname { width: 150px; }
        .windowimage { max-width: 100px; max-height: 100px; }
        .result-container { display: flex; align-items: center; margin-bottom: 5px; }
        .result { margin-right: 10px; }
        .skinname { margin: 0; font-size: 0.9em; }
        .collection-item { list-style: none; margin-bottom: 10px; border: 1px solid #eee; padding: 5px; }
        ul { padding: 0; }
        a { text-decoration: none; color: inherit; display: block; }
    </style>
</head>
<body>
    <a onclick="showClassic()">
        <div class="classic">
            <img src="images/classic/classic_default.png" class="imgcol2" id="classicimg" style="max-height: 75px; max-width: 150px;" >
            <div class="wname" style="width: 150px;">CLASSIC</div>
        </div>
    </a>
    <a onclick="showShorty()">
        <div class="shorty">
            <img src="images/shorty/shorty_default.png" class="imgcol2" id="shortyimg">
            <div class="wname" style="width: 150px;">SHORTY</div>
        </div>
    </a>

    <div class="results">
        <h2>Classic Items</h2>
        <ul id="classicList">
            <!-- Classic 列表内容将通过JS动态生成 -->
        </ul>
    </div>

    <div class="results">
        <h2>Shorty Items</h2>
        <ul id="shortyList">
            <!-- Shorty 列表内容将通过JS动态生成 -->
        </ul>
    </div>

    <script>
        // 假设这些函数在实际应用中已定义
        function showClassic() { console.log("显示 Classic 主区域"); }
        function showShorty() { console.log("显示 Shorty 主区域"); }

        function classicImage(id) {
            console.log('Setting classic image to:', id);
            const mainClassicImg = document.getElementById('classicimg');
            const sourceImg = document.getElementById(id); // 查找列表项中对应的图片
            if (mainClassicImg && sourceImg) {
                mainClassicImg.src = sourceImg.src;
            }
        }
        function setClassicPrice(price) { console.log('Setting classic price to:', price); }

        function shortyImage(id) {
            console.log('Setting shorty image to:', id);
            const mainShortyImg = document.getElementById('shortyimg');
            const sourceImg = document.getElementById(id); // 查找列表项中对应的图片
            if (mainShortyImg && sourceImg) {
                mainShortyImg.src = sourceImg.src;
            }
        }
        function setShortyPrice(price) { console.log('Setting shorty price to:', price); }

        document.addEventListener('DOMContentLoaded', () => {
            // 渲染 Classic 列表
            const classicListElement = document.getElementById('classicList');
            fetch('classicData.json')
                .then(response => response.json())
                .then(data => {
                    data.forEach(item => {
                        const listItem = document.createElement('li');
                        listItem.className = 'collection-item';
                        // 使用模板字符串构建HTML,并绑定事件
                        listItem.innerHTML = `
                            <a onclick="classicImage('${item.id}'); setClassicPrice(${item.price})">
                                <div class="result-container">
                                    <div class="result">
                                        <img src="${item.imagePath}" class="windowimage" id="${item.id}">
                                    </div>
                                    <p class="skinname">${item.name}</p>
                                </div>
                            </a>
                        `;
                        classicListElement.appendChild(listItem);
                    });
                })
                .catch(error => console.error('Error loading classic list data:', error));

            // 渲染 Shorty 列表 (假设也有 shortyData.json)
            const shortyListElement = document.getElementById('shortyList');
            fetch('shortyData.json') // 假设存在 shortyData.json
                .then(response => response.json())
                .then(data => {
                    data.forEach(item => {
                        const listItem = document.createElement

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

WorkBuddy
WorkBuddy

腾讯云推出的AI原生桌面智能体工作台

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
json数据格式
json数据格式

JSON是一种轻量级的数据交换格式。本专题为大家带来json数据格式相关文章,帮助大家解决问题。

457

2023.08.07

json是什么
json是什么

JSON是一种轻量级的数据交换格式,具有简洁、易读、跨平台和语言的特点,JSON数据是通过键值对的方式进行组织,其中键是字符串,值可以是字符串、数值、布尔值、数组、对象或者null,在Web开发、数据交换和配置文件等方面得到广泛应用。本专题为大家提供json相关的文章、下载、课程内容,供大家免费下载体验。

549

2023.08.23

jquery怎么操作json
jquery怎么操作json

操作的方法有:1、“$.parseJSON(jsonString)”2、“$.getJSON(url, data, success)”;3、“$.each(obj, callback)”;4、“$.ajax()”。更多jquery怎么操作json的详细内容,可以访问本专题下面的文章。

337

2023.10.13

go语言处理json数据方法
go语言处理json数据方法

本专题整合了go语言中处理json数据方法,阅读专题下面的文章了解更多详细内容。

82

2025.09.10

jquery插件有哪些
jquery插件有哪些

jquery插件有jQuery UI、jQuery Validate、jQuery DataTables、jQuery Slick、jQuery LazyLoad、jQuery Countdown、jQuery Lightbox、jQuery FullCalendar、jQuery Chosen和jQuery EasyUI等。本专题为大家提供jquery插件相关的文章、下载、课程内容,供大家免费下载体验。

156

2023.09.12

jquery怎么操作json
jquery怎么操作json

操作的方法有:1、“$.parseJSON(jsonString)”2、“$.getJSON(url, data, success)”;3、“$.each(obj, callback)”;4、“$.ajax()”。更多jquery怎么操作json的详细内容,可以访问本专题下面的文章。

337

2023.10.13

jquery删除元素的方法
jquery删除元素的方法

jquery可以通过.remove() 方法、 .detach() 方法、.empty() 方法、.unwrap() 方法、.replaceWith() 方法、.html('') 方法和.hide() 方法来删除元素。更多关于jquery相关的问题,详情请看本专题下面的文章。php中文网欢迎大家前来学习。

406

2023.11.10

jQuery hover()方法的使用
jQuery hover()方法的使用

hover()是jQuery中一个常用的方法,它用于绑定两个事件处理函数,这两个函数将在鼠标指针进入和离开匹配的元素时执行。想了解更多hover()的相关内容,可以阅读本专题下面的文章。

515

2023.12.04

TypeScript类型系统进阶与大型前端项目实践
TypeScript类型系统进阶与大型前端项目实践

本专题围绕 TypeScript 在大型前端项目中的应用展开,深入讲解类型系统设计与工程化开发方法。内容包括泛型与高级类型、类型推断机制、声明文件编写、模块化结构设计以及代码规范管理。通过真实项目案例分析,帮助开发者构建类型安全、结构清晰、易维护的前端工程体系,提高团队协作效率与代码质量。

26

2026.03.13

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
React 教程
React 教程

共58课时 | 6万人学习

TypeScript 教程
TypeScript 教程

共19课时 | 3.4万人学习

Bootstrap 5教程
Bootstrap 5教程

共46课时 | 3.6万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号