js动态添加任何html标签

本文介绍了一种使用JavaScript自定义HTML标签的方法,通过创建闭合和半闭合标签来简化HTML代码的生成过程,并提供了示例代码及使用说明。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

编程思路: 

我认为, 对于html标签来说, 分为闭合和半闭合两种, 

当我用js创造一大片html代码的时候, 会容易出现很杂乱的观感,而且并不容易维护. 

那么我将创建闭合和半闭合标签作为两个方法, 每次创建就调用一次, 返回字符串类型的HTML代码,

然后用$....append() 或者 DOM的innerHTML加入就可以

 

建议: 配合JQuery食用更佳, 当然document.....innerHTML也可以.

 

格式示例: 

    let create = new CreateNode();                            // 必须的

    let code = create. packageNode("div", {

            // 你可以在这里加上所有你喜欢的属性节点,

            // 但请要注意的是, content属性是用来生成闭合标签内部内容的, 所以这点要留意

            // 另外, 由于packageNode 和 halfPackageNode都只是返回字符串, 那么你可以在content里嵌套你的其他标签

            class: 'div-class',            

            id: 'wokao',

            content: '包含的内容' + create.packageNode("div", {

                     content: "内容2"  

             })

})

$("body").append(code)        // 添加到html文档

 

使用方法 和 参数解释:

 let create = new CreateNode();     // 必须, 第一步

create.packageNode( ['标签名'], ['属性名(content属性是闭合标签内的内容)'] )         // 创建闭合标签

create.halfPackageNode( ['标签名'], ['属性名(请不要填写content属性, 填写了也没用)'] )         // 创建半闭合标签

 

实现代码:

// 创建元素节点
// :method halfPackageNode: 创建半闭合节点
// :method PackageNode: 创建闭合节点
function CreateNodes() {
    if (!this instanceof CreateNodes) return new CreateNodes();

    // 创建半闭合节点
    // :param nodeName: [String] 节点名称
    // :param obj: [Object] 属性集合
    // :return [String] 返回对应的HTML代码
    this.halfPackageNode = function (nodeName, obj) {
        // 数据检查
        if (typeof nodeName !== 'string') return false;
        let objType = Object.prototype.toString.call(obj).slice(8, -1);
        if (objType !== 'Object') return false;

        // 组装属性
        let property = '';
        for (let i in obj) {
            if (Object.prototype.toString.call(obj[i]).slice(8, -1) === 'Function') {
                obj[i] = obj[i]();
                !obj[i] && (obj[i] = '');
            }
            property += (" " + i + "='" + obj[i] + "'");
        }

        // 返回html代码
        return "<" + nodeName + property + " />";
    };

    // 创建闭合节点
    // :param nodeName: [String] 节点名称
    // :param obj: [Object/String] 属性集合(content属性是节点内容,如果是字符串,那么直接加入节点内)
    this.packageNode = function (nodeName, obj) {
        // 数据检查
        if (typeof nodeName !== 'string') return false;
        let objType = Object.prototype.toString.call(obj).slice(8, -1);
        if (objType === 'Array' || objType === 'Function') return false;

        // 组装代码
        let property = '', content = '';
        if (objType === 'String') content = obj;
        else {
            let i = 0, key = Object.keys(obj), len = key.length;
            for (; i < len; i++) {
                // 如果对象属性值是一个函数, 那么执行函数
                if (Object.prototype.toString.call(obj[key[i]]) === '[object Function]') {
                    obj[key[i]] = obj[key[i]]();
                    !obj[key[i]] && (obj[key[i]] = '');
                }

                // 如果对象拥有"content"属性, 把值抽出来,并删除其属性
                if (key[i] === 'content') {
                    content = obj['content'];
                    continue;
                }

                // 组装节点属性
                property += " " + key[i] + "='" + obj[key[i]] + "'";
            }

        }
        return "<" + nodeName + property + ">" + content + "</" + nodeName + ">";
    };
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值