首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用Alpine.js组件克隆HTML元素

用Alpine.js组件克隆HTML元素
EN

Stack Overflow用户
提问于 2020-09-24 15:28:34
回答 1查看 2.2K关注 0票数 0

我有带有Alpine.js组件的Html。我希望能够克隆它(使用jQuery)。不幸的是,它不起作用--当使用x-for时,我得到:

ReferenceError:未定义选项

事实上,有些元素内容是重复的(“一二三”每段显示两次)

显然,这里的代码是简化的(实际上,我想用更多的组件方法克隆自定义下拉列表),但是我相信简单的代码清楚地显示了问题。

Html代码:

代码语言:javascript
复制
<div>

<p x-data="{...CustomComponent}" x-init="initialize()">
  <template x-for="option in options">
     <span x-text="option"></span>
  </template>
</p>

</div>

<button>Clone element</button>

JavaScript代码:

代码语言:javascript
复制
const CustomComponent = (function() {

  return {
  
    options: [],
    initialize()
    {    
      this.options = ['one', 'two', 'three'];
    }
  }
}());


$('button').on('click', function() {
    $('div').append($('p').first().clone());

});

JS Fiddle

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-09-24 18:20:37

解决方案似乎是在克隆之前不解析元素的副本:

Html:

代码语言:javascript
复制
<div>


<p x-data="{...CustomComponent}" x-init="initialize()">
  <template x-for="option in options">
     <span x-text="option"></span>
  </template>
</p>

</div>

<button>Clone element</button>

<template class="tpl">
  <p x-data="{...CustomComponent}" x-init="initialize()">
    <template x-for="option in options">
       <span x-text="option"></span>
    </template>
  </p>
</template>

JavaScript:

代码语言:javascript
复制
const CustomComponent = (function() {

  return {
  
    options: [],
    initialize()
    {
      this.options = ['one', 'two', 'three'];
    }
  }
}());


$('button').on('click', function() {

    $('div').append($('template.tpl').html());

});

JS Fiddle

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64049646

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档