`
zbm2001
  • 浏览: 16265 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

自定义createElement——根据html字符串创建元素

阅读更多
zCool工具箱新增工具——createElement方法。

用法:根据(HTML)字符串参数创建一个元素。

示例:
createElement('div');//这个当然是调用内置方法了
createElement('<tbody><tr><td></td></tr><tr></tbody>');
createElement('<img src="***" name="***" />');
createElement('<br>');

你可以回想一下,特别是用insertRow/insertCell这些传统方法为表格创建添加元素有多痛苦

源码实现:
/**
 * @author zbm2001 宝儿
 */
createElement = function(sHtml){
    // 创建一个可复用的包装元素
    var recycled = document.createElement('div'),
    // 创建标签简易匹配
    reg = /^<([a-zA-Z]+)(?=\s|\/>|>)[\s\S]*>$/,
    // 某些元素HTML标签必须插入特定的父标签内,才能产生合法元素
    // 另规避:ie7-某些元素innerHTML只读
    // 创建这些需要包装的父标签hash
    hash = {
        'colgroup': 'table',
        'col': 'colgroup',
        'thead': 'table',
        'tfoot': 'table',
        'tbody': 'table',
        'tr': 'tbody',
        'th': 'tr',
        'td': 'tr',
        'optgroup': 'select',
        'option': 'optgroup',
        'legend': 'fieldset'
    };
    // 闭包重载方法(预定义变量避免重复创建,调用执行更快,成员私有化)
    createElement = function(sHtml){
        // 若不包含标签,调用内置方法创建并返回元素
        if (!reg.test(sHtml)) {
            return document.createElement(sHtml);
        }
        // hash中是否包含匹配的标签名
        var tagName = hash[RegExp.$1.toLowerCase()];
        // 若无,向包装元素innerHTML,创建/截取并返回元素
        if (!tagName) {
            recycled.innerHTML = sHtml;
            return recycled.removeChild(recycled.firstChild);
        }
        // 若匹配hash标签,迭代包装父标签,并保存迭代层次
        var deep = 0, element = recycled;
        do {
            sHtml = '<' + tagName + '>' + sHtml + '</' + tagName + '>';
            deep++;
        }
        while (tagName = hash[tagName]);
        element.innerHTML = sHtml;
        // 根据迭代层次截取被包装的子元素
        do {
            element = element.removeChild(element.firstChild);
        }
        while (--deep > -1);
        // 最终返回需要创建的元素
        return element;
    }
	// 执行方法并返回结果
    return createElement(sHtml);
}

分享到:
评论
3 楼 zbm2001 2009-11-05  
楼上提醒的没错,代码片段是从脚本库里截取的方法成员,
想修改成可以独立调用的方法,刚刚编辑漏了,已修改。
2 楼 lifesinger 2009-11-05  
代码组织上,好像少了一句 this.createElement = createElement:
<code>
    createElement: function(sHtml) {
        // ...
        var createElement = function(sHtml) {
            // ...
        };
        this.createElement = createElement;
        return createElement(sHtml);
    }
</code>
1 楼 lifesinger 2009-11-05  
很不错

相关推荐

    javascript转换字符串为dom对象(字符串动态创建dom).docx

    这个函数接收一个字符串参数 `arg`,然后创建一个 `div` 元素,并将字符串插入到该元素中,然后返回该元素的子节点。这样,我们就完成了一个字符串到标准 DOM 的转换。 使用这个函数,我们可以轻松地将字符串转换为...

    js 文本字符串链接转为锚链接

    总的来说,将文本字符串转换为锚链接是JavaScript中的一种基本操作,它涉及到了DOM元素的创建、属性设置以及动态更新页面内容的能力。在实际开发中,掌握这种技巧有助于提高用户体验,使用户能够更方便地与链接交互...

    C#根据字符串输入生成对应的xml文件.zip

    首先,需要创建一个`XmlDocument`实例,然后通过`CreateElement`方法创建元素,最后使用`AppendChild`或`InsertBefore`方法将元素添加到父元素中。例如: ```csharp XmlDocument doc = new XmlDocument(); ...

    VUE渲染后端返回含有script标签的html字符串示例

    另外,有些情况下,后端返回的HTML字符串可能需要插入到页面上的某个已存在的元素中,例如一个id为`pay`的元素。这种情况下,我们可以这样做: ```javascript async mounted() { const data = await this.payOrder...

    C#字符串处理大全

    根据提供的文件信息,我们可以归纳出一系列关于C#中字符串处理的重要知识点。这些知识点不仅涵盖了基本的字符串操作,还包括了格式转换、日期时间处理以及其他高级功能。以下是对这些知识点的详细阐述: ### C#字符...

    手工HTML代码转换为DOM代码

    在JavaScript中,我们可以使用`document.createElement()`方法创建新的DOM节点,`innerHTML`属性来设置或获取元素的HTML内容,以及`appendChild()`、`removeChild()`等方法操作已有节点。下面是一个简单的例子,展示...

    23.(leaflet篇)leaflet叠加html(leaflet叠加div元素).zip

    在这个例子中,我们创建了一个带有“my-div-icon”类的div图标,并将其内容设置为一个简单的HTML字符串。接着,我们创建了一个Marker对象,指定了这个div图标,并将其添加到了地图上。 为了使HTML元素能够响应用户...

    javascript中createElement的两种创建方式.docx

    ### JavaScript中`createElement`的两种创建...第一种方式适用于需要精细控制元素属性的场景,而第二种方式则适用于简单快速的元素创建。理解这两种方式的区别及其应用场景,对于提高JavaScript编程技能非常有帮助。

    javascript中createElement的两种创建方式

    需要注意的是,当使用字符串方式创建元素时,如果字符串包含脚本代码,这些代码将不会被执行,因为 `createElement` 方法中的字符串不会被浏览器解析为 HTML,而是作为一个普通的字符串处理。这就是为什么在 `Create...

    头歌教学实践平台 Web前端开发基础 JavaScript学习手册十四:HTML DOM-文档元素的操作(二)

    `createElement()`创建新的元素,`appendChild()`或`insertBefore()`用于将新元素插入到文档中。例如,`var newElement = document.createElement('div'); document.body.appendChild(newElement);`会在页面底部添加...

    react-使用自定义元素将React组件挂载到DOM

    自定义元素是Web Components技术的一部分,它允许开发者创建具有特定功能的可复用、自包含的HTML元素。在JavaScript中,我们可以利用`class extends HTMLElement`来定义一个自定义元素,然后通过`customElements....

    javascript转换字符串为dom对象(字符串动态创建dom)

    以下是一个简单的函数`parseDom`,它接受一个HTML字符串作为参数,通过创建一个临时的`div`元素,然后设置其`innerHTML`属性为传入的字符串,从而实现字符串到DOM的转换。之后,通过`childNodes`属性获取并返回转换...

    在JS中解析HTML字符串示例代码

    接下来,通过设置`innerHTML`属性将HTML字符串赋值给新创建的`div`元素: ```javascript el.innerHTML = "&lt;html&gt;&lt;head&gt;&lt;title&gt;titleTest&lt;/title&gt;&lt;/head&gt;&lt;body&gt;&lt;a href='test0'&gt;test01&lt;/a&gt;&lt;a href='test1'&gt;test02...

    JS学习笔记(BOM,DOM,字符串方法等)

    常见的字符串方法包括`length`属性(返回字符串长度),`charAt()`(根据索引获取字符),`charCodeAt()`(获取字符的Unicode编码),以及`fromCharCode()`(根据Unicode编码创建字符)。 以上是JavaScript中的一些...

    将Html转化成能追加的js格式

    3. 创建元素:根据转换后的字符串,使用`createElement`等方法创建DOM元素。 4. 插入DOM:使用`appendChild`或`insertAdjacentHTML`等方法将新创建的元素追加到目标位置。 使用这样的工具,开发者可以更方便地管理...

    js实例js实例

    在JavaScript中,字符串是不可变的,这意味着一旦创建,就不能改变。因此,追加字符串通常涉及到将两个或多个字符串合并成一个新的字符串。这可以通过使用加号"+"来实现。例如: ```javascript var str1 = "Hello";...

    在JOINTJS元素中使用HTML

    本篇文章将详细介绍如何在JointJS中创建自定义视图,以便在元素中嵌入HTML,实现功能性的输入。 首先,了解JointJS的基本概念是必要的。JointJS的核心是Graph和Paper。Graph是一个数据结构,存储了所有的元素...

    基于jQuery对象和DOM对象和字符串之间的转化实例

    1、字符串———-&gt;jQuery对象 $(HTML字符串): $(‘我是祖国的一朵小花’) 待添加列表 2、jQuery对象———-&gt;DOM对象 下标选取法(原理:jQuery是DOM的数组形式):$(“h2”)[1] 使用.get(index)函数 3、字符串———–&gt;...

    JS动态创建元素的两种方法

    字符串拼接形式适合于简单的元素创建和插入,尤其是当元素结构相对固定且不需要复杂交互时。使用Document、Element对象则适合于需要进行复杂操作的情况,比如对元素进行事件监听、动态绑定数据和逻辑处理等。 总结...

Global site tag (gtag.js) - Google Analytics