1

我想知道是否有办法获取模板标签中元素的内容并将其作为字符串返回?目前,它似乎正在返回一些内容,[object document fragment]但只想要里面的 html 内容。

function CreateWidget(widget) {
    //Check if browser supports templates
    if ('content' in document.createElement('template')) {
        //Grab the template's content and assign it to a variable so we only have the gut of the template
        var widgetContent = document.querySelector('#panel-template').content //('#panel-template').get(1).setAttribute('id', widget.WidgetCode);
        widgetContent.querySelector('#chart').setAttribute('id', widget.WidgetCode);

        //get the overlay toolbar
        var widgetOverlay = widgetContent.querySelector('.overlayed');
        widgetOverlay.setAttribute('data-render', widget.WidgetCode);
        widgetOverlay.setAttribute('data-chartType', widget.chartType);
        widgetOverlay.setAttribute('data-devID', widget.deviceID);
        widgetOverlay.setAttribute('data-metricType', widget.metricType);
        widgetOverlay.setAttribute('data-title', widget.WidgetName);

        var el = document.importNode(widgetContent, true);
        alert(el);   
    }
}
4

1 回答 1

6

如果你想要的只是 HTML 作为字符串,你可以用通常的方式得到它.innerHTML

document.querySelector("template").innerHTML

如果您想要textContent,则可以从.content.textContent; 像这样:

document.querySelector("template").content.textContent

如果您想实际迭代template子节点或对其内容执行许多其他操作,则需要使用该.content属性,该属性返回DocumentFragment

从那里你有children, firstElementChild, lastElementChild, childElementCount, and find(), findAll(), querySelector(), querySelectorAll(), getElementById; 至少最终——除了query*方法和getElementById(). 不确定 Safari 是否支持其中的大部分功能(约 2015-10 年)。而且我认为还没有人支持find()/ findAll()

于 2015-09-29T00:45:17.797 回答