我正在重构一些旧的JavaScript代码,其中有很多DOM操作。
var d = document;
var odv = d.createElement("div");
odv.style.display = "none";
this.OuterDiv = odv;
var t = d.createElement("table");
t.cellSpacing = 0;
t.className = "text";
odv.appendChild(t);
我想知道是否有一个更好的方法来做到这一点使用jQuery。我一直在尝试:
var odv = $.create("div");
$.append(odv);
// And many more
但我不确定这样是否更好。
在以前的回答中没有提到,所以我添加了如何使用最新的jQuery创建元素元素的工作示例,也有其他属性,如内容,类,或onclick回调:
Const挂载点= 'https://jsonplaceholder.typicode.com/users'
Const $button = $('button')
Const $tbody = $('tbody')
const loadAndRender = () => {
美元.getJSON(挂载点)。然后(data => {
美元。Each (data, (index, {id, username, name, email}) => {
Let row = $('<tr>')
.append($('<td>', {text: id}))
.append($(“< td >”,{
文字:用户名、
类:“按我”,
: {
点击:_ => {
console.log(名字)
}
}
}))
.append($('<td>', {text: email}))
tbody.append美元(行)
})
})
}
美元的按钮。(“点击”,loadAndRender)
.click-me {
background - color: lightgrey
}
<table style="width: 100%
< thead >
< tr >
< th > ID < / th >
< th >用户名< / th >
< th > < / th >邮件
< / tr >
< / thead >
tbody > <
tbody > < /
表> < /
加载和渲染</button>
< script src = " https://code.jquery.com/jquery-3.3.1.min.js " > < /脚本>
我刚刚做了一个小的jQuery插件:https://github.com/ern0/jquery.create
它遵循你的语法:
var myDiv = $.create("div");
DOM节点ID可以指定为第二个参数:
var secondItem = $.create("div","item2");
严重吗?不。但是这个语法比$("<div></div>")更好,而且它的价值非常高。
我是一个新的jQuery用户,从DOMAssistant切换过来的,它有类似的功能:http://www.domassistant.com/documentation/DOMAssistantContent-module.php
我的插件更简单,我认为attrs和内容最好通过链接方法添加:
$("#container").append( $.create("div").addClass("box").html("Hello, world!") );
同时,它也是一个简单的jquery插件(第100个)的好例子。
虽然这是一个非常老的问题,但我认为用最近的信息来更新它会很好;
自jQuery 1.8以来,有一个jQuery. parsehtml()函数,它现在是创建元素的首选方式。此外,通过$('(HTML代码在这里)')解析HTML也存在一些问题,例如jQuery官方网站在他们的发布说明中提到了以下内容:
轻松的HTML解析:您可以再次使用前导空格或
在$(htmlString)标签前的换行。我们仍然强烈建议这样做
解析从外部获取的HTML时使用$.parseHTML()
源代码,并可能对HTML解析做进一步的更改
的未来。
为切合实际问题,所提供的例子可译为:
this.$OuterDiv = $($.parseHTML('<div></div>'))
.hide()
.append($($.parseHTML('<table></table>'))
.attr({ cellSpacing : 0 })
.addClass("text")
)
;
不幸的是,这比只使用$()更不方便,但它给了你更多的控制,例如你可以选择排除脚本标签(它会留下内联脚本,如onclick):
> $.parseHTML('<div onclick="a"></div><script></script>')
[<div onclick="a"></div>]
> $.parseHTML('<div onclick="a"></div><script></script>', document, true)
[<div onclick="a"></div>, <script></script>]
此外,以下是根据新情况调整的排名第一的答案的基准:
JSbin链接
jQuery 1.9.1
$.parseHTML: 88ms
$($.parseHTML): 240ms
<div></div>: 138ms
<div>: 143ms
createElement: 64ms
看起来parseHTML更接近createElement而不是$(),但是在将结果包装到一个新的jQuery对象中之后,所有的改进都消失了