Nodejs开发Tree HTML元素

Nodejs开发Tree HTML元素

原文 http://forjs.org/book/lkaK8WuNme/section/eJxjV_qljUl 开发Tree HTML元素 ================

推荐:《精通Node.js开发》 《Angular.js视频详解》

可加作者QQ 1405491181 交流Node.js & HTML5 相关技术

基本结构

<template is="auto-binding" id="tree">
&lt;core-menu selected="0"&gt;

    &lt;core-submenu icon="settings" label="Topics"&gt;
        &lt;core-item label="Topic 1"&gt;&lt;/core-item&gt;
        &lt;core-item label="Topic 2"&gt;&lt;/core-item&gt;
    &lt;/core-submenu&gt;

    &lt;core-submenu icon="settings" label="Favorites"&gt;
        &lt;core-item label="Favorite 1"&gt;&lt;/core-item&gt;
        &lt;core-item label="Favorite 2"&gt;&lt;/core-item&gt;
        &lt;core-item label="Favorite 3"&gt;&lt;/core-item&gt;
        &lt;core-submenu label="Topics"&gt;
            &lt;core-item label="Topic 1"&gt;&lt;/core-item&gt;
            &lt;core-item label="Topic 2"&gt;&lt;/core-item&gt;
        &lt;/core-submenu&gt;

    &lt;/core-submenu&gt;

&lt;/core-menu&gt;

</template>

效果

分离到单独文件 leogiese-tree.html

需要创建一个leogiese-tree.html 表示一个html元素类。

该元素继承了core-menu

<polymer-element extends="core-menu" name="leogiese-tree">
    <template>
        <core-menu selected="0">
        &lt;core-submenu icon="settings" label="Topics"&gt;
            &lt;core-item label="Topic 1"&gt;&lt;/core-item&gt;
            &lt;core-item label="Topic 2"&gt;&lt;/core-item&gt;
        &lt;/core-submenu&gt;

        &lt;core-submenu icon="settings" label="Favorites"&gt;
            &lt;core-item label="Favorite 1"&gt;&lt;/core-item&gt;
            &lt;core-item label="Favorite 2"&gt;&lt;/core-item&gt;
            &lt;core-item label="Favorite 3"&gt;&lt;/core-item&gt;
            &lt;core-submenu label="Topics"&gt;
                &lt;core-item label="Topic 1"&gt;&lt;/core-item&gt;
                &lt;core-item label="Topic 2"&gt;&lt;/core-item&gt;
            &lt;/core-submenu&gt;
        &lt;/core-submenu&gt;

    &lt;/core-menu&gt;
&lt;/template&gt;
&lt;script&gt;
    Polymer('leogiese-tree', {
        ready: function () {

        }
    });
&lt;/script&gt;

</polymer-element>

在网页上只要输入:

<body unresolved>
    <leogiese-tree></leogiese-tree>
</body>

即可显示出相同效果,但如果 … …

<body unresolved>
    <leogiese-tree style="float: left"></leogiese-tree>
    <leogiese-tree style="float: left"></leogiese-tree>
</body>

就会显示出


9 回复

Node.js 开发 Tree HTML 元素

推荐:

基本结构

我们可以通过使用Web Components来构建一个可复用的树形结构HTML元素。以下是一个简单的例子:

<template is="auto-binding" id="tree">
    <core-menu selected="0">
        <core-submenu icon="settings" label="Topics">
            <core-item label="Topic 1"></core-item>
            <core-item label="Topic 2"></core-item>
        </core-submenu>
        <core-submenu icon="settings" label="Favorites">
            <core-item label="Favorite 1"></core-item>
            <core-item label="Favorite 2"></core-item>
            <core-item label="Favorite 3"></core-item>
            <core-submenu label="Topics">
                <core-item label="Topic 1"></core-item>
                <core-item label="Topic 2"></core-item>
            </core-submenu>
        </core-submenu>
    </core-menu>
</template>

效果

效果示意图

分离到单独文件 leogiese-tree.html

为了使代码更清晰和可复用,我们可以将树形结构封装到一个单独的HTML文件中,并定义为一个自定义元素。

<!-- leogiese-tree.html -->
<polymer-element extends="core-menu" name="leogiese-tree">
    <template>
        <core-menu selected="0">
            <core-submenu icon="settings" label="Topics">
                <core-item label="Topic 1"></core-item>
                <core-item label="Topic 2"></core-item>
            </core-submenu>
            <core-submenu icon="settings" label="Favorites">
                <core-item label="Favorite 1"></core-item>
                <core-item label="Favorite 2"></core-item>
                <core-item label="Favorite 3"></core-item>
                <core-submenu label="Topics">
                    <core-item label="Topic 1"></core-item>
                    <core-item label="Topic 2"></core-item>
                </core-submenu>
            </core-submenu>
        </core-menu>
    </template>
    <script>
        Polymer('leogiese-tree', {
            ready: function() {
                // 在这里可以添加一些初始化逻辑
            }
        });
    </script>
</polymer-element>

使用自定义元素

在HTML页面中引入并使用这个自定义元素非常简单:

<body unresolved>
    <leogiese-tree></leogiese-tree>
</body>

这样,你就可以在页面上显示一个树形结构。如果你想要显示多个树形结构,只需重复使用<leogiese-tree>标签:

<body unresolved>
    <leogiese-tree style="float: left"></leogiese-tree>
    <leogiese-tree style="float: left"></leogiese-tree>
</body>

效果如下图所示: 两个树形结构并排显示

通过这种方式,你可以轻松地创建和复用复杂的UI组件,提高代码的可维护性和复用性。


很流b的样子,虽然不会弄

polymer 是什么啊?没听过啊

polymer 是google开发的 web components 支持库

web components 查了一下,说是未来趋势 ?

是的,webcomponent,我认为肯定是未来的趋势了

也不知道什么时候能学会,哎

google 一下 polymer

根据你提供的信息,看起来你在讨论如何使用Polymer来开发自定义的HTML元素(如leogiese-tree)。不过,从问题描述来看,你是想用Node.js来实现类似的功能。Node.js本身并不直接支持Polymer这样的Web组件技术,但它可以通过服务器端渲染或通过客户端JavaScript来实现类似的功能。

这里我将提供一个简单的Node.js示例,展示如何通过Express框架来生成包含树形结构的HTML页面,并且通过客户端JavaScript来处理树形菜单的交互功能。我们将使用EJS模板引擎来生成HTML内容。

首先,确保你已经安装了Node.js环境。然后初始化一个新的项目:

mkdir tree-app
cd tree-app
npm init -y
npm install express ejs

接下来,创建一个简单的服务器脚本index.js

const express = require('express');
const app = express();
app.set('view engine', 'ejs');

app.get('/', (req, res) => {
  const treeData = [
    {label: 'Topics', children: ['Topic 1', 'Topic 2']},
    {label: 'Favorites', children: ['Favorite 1', 'Favorite 2', 'Favorite 3', {label: 'Topics', children: ['Topic 1', 'Topic 2']}]}
  ];
  res.render('index', {treeData});
});

app.listen(3000, () => console.log('App listening on port 3000!'));

接着,在项目的根目录下创建一个views文件夹,并在其中添加一个index.ejs文件:

<!DOCTYPE html>
<html>
<head>
    <title>Tree Menu Example</title>
    <style>
        /* Add your styles here */
    </style>
</head>
<body>
    <div id="tree"></div>
    <script>
        // 客户端JavaScript逻辑来渲染树形结构
        const treeData = <%= JSON.stringify(treeData) %>;
        function renderTree(data, parentElement) {
            data.forEach(item => {
                let itemEl = document.createElement('div');
                itemEl.textContent = item.label;
                if (item.children) {
                    let childEl = document.createElement('div');
                    renderTree(item.children, childEl);
                    itemEl.appendChild(childEl);
                }
                parentElement.appendChild(itemEl);
            });
        }

        renderTree(<%= JSON.stringify(treeData) %>, document.getElementById('tree'));
    </script>
</body>
</html>

这段代码设置了一个简单的Express应用,它将树形数据传递给EJS模板,然后在客户端JavaScript中递归地渲染这个树形结构。这样你可以通过调整treeData中的数据结构来动态改变树形菜单的内容。

回到顶部