javascript - 使用 jQuery 缩短创建 DOM 片段的代码

标签 javascript jquery

我有以下代码来创建一个元素树,我将其用作 JsTestDriver 单元测试的输入。可以使用 jQuery 来跟踪吗?我研究了 jQuery.parseHTML 函数,但我最终需要提取 DOM 元素。

var doc = document.implementation.createHTMLDocument('');
var root = doc.createElement('DIV');
root.appendChild(doc.createTextNode('Web '));
var span1 = doc.createElement('SPAN');
span1.setAttribute("class", HL_CLASS);
span1.appendChild(doc.createTextNode('browsers'));
root.appendChild(span1);
root.appendChild(doc.createTextNode(' must '));
var span2 = doc.createElement('SPAN');
span2.setAttribute("class", HL_CLASS);
span2.appendChild(doc.createTextNode('die'));
root.appendChild(span2);
root.appendChild(doc.createTextNode(''));

最佳答案

如果没有 jQuery,它可能会大大缩短:在第二行之后,只需将包含 HTML 的字符串分配给 root.innerHTML:

var doc = document.implementation.createHTMLDocument('');
var root = doc.createElement('DIV');
root.innerHTML =
    'Web <span class="' + HL_CLASS +
    '">browsers</span> must <span class="' + HL_CLASS +
    '">die</span>';

使用 jQuery,您可以使用 $() 函数执行相同的操作,该函数接受包含 HTML 片段的字符串并为它们创建 DOM 元素(并将顶级元素存储在 jQuery 中)它返回的对象)。

var doc = document.implementation.createHTMLDocument('');
var root = $(
    '<div>' +
    'Web <span class="' + HL_CLASS +
    '">browsers</span> must <span class="' + HL_CLASS +
    '">die</span>' +
    '</div>',
    doc)[0];

请注意,对于 jQuery 版本,我必须将您的自定义文档作为第二个参数传递。

通过一些简单的模板可以使这两者变得更清晰(并且有许多模板实现可供选择)。这是一个非常非常基本的示例,没有任何模板引擎,只是为了展示其好处:

var doc = document.implementation.createHTMLDocument('');
var html = 
    '<div>' +
    'Web <span class="{HL_CLASS}">browsers</span> ' +
    'must <span class="{HL_CLASS}">die</span>' +
    '</div>';
var root = $(html.replace(/\{HL_CLASS\}/g, HL_CLASS), doc)[0];

不过,理想情况下,您可以从可以正确编辑它的文件中动态加载该模板(使用构建工具将其嵌入到生产中),而不是字符串文字。

关于javascript - 使用 jQuery 缩短创建 DOM 片段的代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25371116/

相关文章:

javascript - 特定 View 部分中可见表 <tr> 行数

用于捕获相关收件人字段中找到的电子邮件地址的 Javascript 和 PHP 正则表达式

javascript - react native - react-native-maps 在 iOS 上性能缓慢

javascript - 如果动态元素通过条件,则更改其属性

javascript - jQuery 如果一个元素可见,则关闭另一个元素

jquery - jqplot轴刻度标签带省略号

javascript - 使用 JavaScript 将多个 DateTime Duration 字符串添加在一起以获得总持续时间

javascript - 使用 url 的下拉选项值在提交时重定向表单

javascript - 使用 Bootstrap 折叠单击其属性时显示数据

javascript - 在javascript中创建动态关联数组