【问题标题】:Appending content into template tag将内容附加到模板标签中
【发布时间】:2016-06-18 14:26:13
【问题描述】:

我正在尝试将内容附加到模板标签中。我正在使用

getcontent("clients.json").then(function(x){
   obj = JSON.parse(x);
}).then(function(x){

   var x = createFullList(obj,docFragment);
   filtered = obj;
   return x;
}).then(function(x){
   template   .appendChild(x);
   var clone = document.importNode(template.content, true);
   alert(clone.children.length);
   aside.appendChild(clone)
});

getcontent 是返回响应的ajax 调用,响应被解析并作为对象存储在obj 变量中,

createFullList 为 ajax 响应中的每个元素创建 div 并将其附加到 fragment 中,然后将 fragment 附加到也返回的 div 中,

function createFullList( obj , fragment ){
   var aside       = document.getElementsByClassName("one")[0];
   for( x in obj ){
      createInfoElement( fragment , obj[x].general , obj[x].job , x);
   }
   var div = document.createElement("div");
   div.appendChild(fragment);
   deleteKid( aside , 1 );
   return div;
}

让我烦恼的是添加到模板中,它什么也没做,当我尝试复制它的内容时,它说它有 0 个孩子,如果我打印 div 的孩子,它会打印正确的数字。

为什么没有将内容附加到模板中?这是正确的方法还是有任何特定的方法可以正确地将内容附加到模板中?

【问题讨论】:

    标签: javascript html5-template


    【解决方案1】:

    您应该将片段附加到template.content 而不是template

    template.content.appendChild( x )
    

    【讨论】:

      【解决方案2】:

      如果你只使用一个then(),像这样:

      var obj;
      getcontent("clients.json").then(function(x){
         obj = JSON.parse(x);
      }).then(function(){
        var x = createFullList(obj, docFragment);
        filtered = obj;
      
        template.appendChild(x);
        var clone = document.importNode(template.content, true);
        alert(clone.children.length);
        aside.appendChild(clone)
      
        return(x);
      });
      

      我相信您尝试引用的变量在 template.appendChild() 所指的范围内不可用。

      【讨论】:

      • 情况并非如此,当我尝试提醒(x.children.length)时,它会输出适量的孩子。也只是为了确保我尝试过并且行为保持不变。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-06
      • 2019-12-31
      • 2017-11-02
      • 2015-08-07
      相关资源
      最近更新 更多