如何在jQuery中生成无根的DOM元素
How to generate rootless DOM-elements in jQuery?
为了减少DOM操作的数量,我想生成一个临时DOM,稍后我会将其添加到网页的DOM中。
就我而言,我想链接元素,即从
<span>.1.</span>
我想添加<span>.2.</span>
<span>.1.</span><span>.2.</span>
是否可以在不定义根元素的情况下将元素添加/追加到另一个元素?
到目前为止,我发现的唯一方法是使用 add()
并重新分配结果,但这是好的做法吗?
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8"/>
<title>TEMPLATE</title>
</head>
<body>
<div id="main">
</div>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.0/jquery.min.js"></script>
<script>
$(function() {
var mainRef = $('#main');
// Using add() and reassignment works (but I have to reassign,...)
var newElem1 = $('<div>foo</div>');
newElem1 = newElem1.add("<strong>.1.</strong>");
newElem1 = newElem1.add($("<strong>.2.</strong>"));
// append() works with root element (I don't want a root element)
var newElem2 = $('<div>');
newElem2.append("<strong>.3.</strong>");
newElem2.append($("<strong>.4.</strong>"));
// creating element directly works (but that's not adding)
var newElem3 = $('<div>.5.</div><div>.6.</div>');
// append() does not work with an empty root element
var newElem4 = $('');
newElem4.append("<strong>.7.</strong>");
newElem4.append($("<strong>.8.</strong>"));
mainRef.append(newElem1);
mainRef.append(newElem2);
mainRef.append(newElem3);
mainRef.append(newElem4);
});
</script>
</body>
</html>
您似乎正在寻找一个documentFragment
,顾名思义,它是文档的一个片段,并且存在是为了暂时保存元素,直到您准备好将该片段添加到文档本身; 例如:
var fragment = document.createDocumentFragment(),
div = document.createElement('div');
// documentFragment not present in the DOM at this point:
fragment.appendChild(div);
// document fragment contains a child element,
// neither of which is present in the DOM.
// appending the document to the document:
document.body.appendChild(frag);
// the <div> is now in the DOM, the fragment
// itself is not, and no longer contains the <div>.
当fragment
追加到<body>
实际上只插入<div>
时,fragment
不再存在。
learn.jquery.com 讨论了
这个问题。解决方案:
- 将所有元素添加到数组中
- 使用空字符串联接数组
- 最后将连接的字符串作为 elemnet 附加到目标元素
这也适用于文本元素。例如,尝试:
$(function() {
var myItems = [];
var myList = $( "#main" );
for ( var i = 0; i < 10; i++ ) {
myItems.push( "<div>div-item " + i + "</div>" );
}
for ( var i = 0; i < 10; i++ ) {
myItems.push( "Text-item " + i + ", " );
}
myList.append( myItems.join( "" ) );
});
相关文章:
- 如何在DOM元素上按类型构建此函数
- DOM元素和angular元素之间的主要区别是什么
- 当带有渲染器的DOM元素不在屏幕顶部时,移动了场景的坐标
- 使用jquery创建dom元素会导致ie9出现拒绝访问错误
- 如何在使用Ractive.extend()时引用DOM元素
- 在d3中向DOM元素添加了图像,但现在它赢得了't过渡
- 如何'剪切'DOM元素并将其显示在其他位置
- 转换<a>使用jQuery将文本字符串转换为dom元素
- d3在数据更新时错误地附加了dom元素
- 访问VueJS中的DOM元素
- 在Meteor中如何查找DOM元素(渲染后)
- IE9-添加和删除DOM元素会破坏父keydown事件
- 未捕获错误:元素缓存中id为x的DOM元素与DOM中的元素不同
- 在 ng-if 编译后访问指令中的 DOM 元素
- spin.js/angular spinner:如何将spin定位到DOM元素中(包括plunker演示)
- 如何在dom元素中插入输入标记数据插件
- Mobile Safari、jQuery以及绑定到未来的DOM元素
- 从字符串创建dom元素时添加多个类
- 如何根据客户端的屏幕大小使用javascript更改DOM元素
- 为onClick-hander插入临时DOM元素