使用javascript将HTML附加到DOM中
append HTML to the DOM with javascript
好的,所以我用下面的javascript将HTML元素附加到DOM中。。
$h.each(domNodes, function(domNode) {
var input;
input = document.createElement('input');
input.setAttribute('type', 'file');
input.setAttribute('id', 'image-file');
input.setAttribute('name', 'files[]');
input.style.display = 'none';
domNode.addEventListener('click', function(){
input.style.opacity = 0;
input.style.display='block';
input.focus();
input.click();
input.style.display='none';
}, false);
domNode.appendChild(input);
}
}
这创建了一行HTML,看起来像这样。。。
<input type="file" id="image-file" name="files[]" multiple="multiple" style="display: none;" />
javascript会是什么样子来创建这样的HTML输出。。。
<input type="file" name="files[]" id="image-file" multiple />
<label class="file-button" for="image-file" >
<img src="img/upload.png" alt="add"> Upload Your File(s)
</label>
我不知道如何用纯javascript将HTML标记嵌套在其他HTML标记中,所以如果有任何帮助,我们将不胜感激。
您应该首先创建一个DocumentFragment,然后可以在将片段插入DOM之前将每个子元素附加到该子元素。
var docFragment = document.createDocumentFragment();
var input = document.createElement("input");
var label = document.createElement("label");
var img = document.createElement("img");
docFragment.appendChild(input);
docFragment.appendChild(label);
label.appendChild(img);
var form = document.getElementsByTagName("form")[0];
form.appendChild(docFragment);
DocumentFragments是DOM节点。它们从来都不是主DOM的一部分树通常的用例是创建文档片段元素添加到文档片段,然后附加文档片段到DOM树。在DOM树中,文档片段是被它的所有子代所取代。
由于文档片段在内存中,而不是主DOM的一部分树,将子级附加到树不会导致页面回流(计算元素的位置和几何形状)。因此,使用文档碎片通常会带来更好的性能。
将单个元素构造为没有任何内容的dom节点不会改变。采用以下appendChild
和createTextNode
方法组装单个零件:
var input, img, label, text;
input = document.createElement('input');
input.setAttribute('type', 'file');
input.setAttribute('id', 'image-file');
input.setAttribute('name', 'files[]');
input.setAttribute('multiple', 'multiple');
label = document.createElement('img');
label.setAttribute('class', 'file-button');
label.setAttribute('for', 'image-file');
img = document.createElement('img');
img.setAttribute('src', 'img/upload.png');
img.setAttribute('alt', 'add');
text = document.createTextNode(' Upload Your File(s)');
label.appendChild(img);
label.appendChild(text);
domNode.appendChild(input);
domNode.appendChild(label);
票据
您可能想要为新的DOM部分使用
documentFragment
容器,请参阅DaveAnderson的回答。如果你可以使用jquery,有一个简单的替代方案:
-
var htmlfrag = $(
'<input type="file" name="files[]" id="image-file" multiple />'n'
+ '<label class="file-button" for="image-file" >'n'
+ ' <img src="img/upload.png" alt="add"> Upload Your File(s)'n'
+ '</label>'n'
);
代替
$
函数,$.parseHtml()
可能更可取,因为它保留了字符串文字中使用的空白。元素上的属性也可以使用json对象进行设置;这可能更可取,因为可以以更简单的方式以编程方式编译属性集及其值。
(感谢Dave Anderson的后两个方面)
与上面所做的相同,只是在将标签附加到domNode 之前必须将img元素附加到label元素
- Windows形成web浏览器控件和Javascript更改的DOM
- 将DOM节点值与字符串Javascript进行比较
- 用于操纵DOM API的Javascript设计模式
- 使用DOM javascript包含文本和图片的按钮
- 使用静态 HTML 或静态 DOM Javascript 设计页面
- DOM Javascript正在删除子节点
- 如何确定是否在父元素的开始或结束存在文本?HTML DOM &JavaScript
- 如何停止DOM javascript事件处理程序
- PHP动态加载的数据在DOM / JavaScript中无法识别
- 通过DOM javascript操作添加HTML ID
- 测试多个变量的条件?Dom Javascript
- 重载页面不改变DOM - Javascript
- building html/php vs DOM/javascript
- 在XUL中使用DOM JavaScript动态创建复选框
- Chrome DOM/JavaScript Reference
- 将元素放置在DOM JavaScript中的特定位置
- 一个很好的DOM/Javascript参考网站
- DOM Javascript:无法在PHP中找到输入
- HTML DOM Javascript not working?
- Documentation for the DOM, JavaScript & CSS