javascript - 如何在 Shadow DOM 中不渲染 <content> 标签中的内容?

标签 javascript polymer web-component shadow-dom

我目前正在开发一个 Web 组件(使用 Polymer 构建),让元素的使用者将一些内容放入元素标签中,如下所示:

<my-element mode="fancy">
  <item>First item</item>
  <item>Second item</item>
  <item>Third item</item>
       <!-- ... -->
</my-element>

所以下一步是使用<content>在我的元素定义内部,如下一个代码片段所示,将内容投影到我的自定义元素中:

<template>
  <content id="idToHandleIt" select="item"></content>
</template>

现在的问题是,所有 item 立即渲染。但我不想在那里显示它们,因为我必须过滤组件(JavaScript)逻辑内的元素以获得更多标准,而不仅仅是我可以在select中使用的CSS选择器。属性。

有人对这个问题有一个好的解决方案吗?或者是否有一个 API 可以让我抓取分布式节点?正如我现在尝试的那样,使用 getDistributedNodes() 的唯一方法如果我执行以下操作:

this.querySelector('idToHandleIt').getDistributedNodes();

但我总是需要<content>元素:(

最佳答案

手动添加到shadowRoot怎么样?

<script src="http://www.polymer-project.org/webcomponents.min.js?20141211"></script>
<link rel="import" href="http://www.polymer-project.org/components/polymer/polymer.html">

<polymer-element name="example-element">
  <template></template>
  <script>
    Polymer({

      ready: function() {
        var children = this.children;

        for (var i = 0; i < children.length; i++) {

          var childElement = children[i];

          if (childElement.hasAttribute("banana") && childElement.getAttribute("amount") > 0) {
            
            this.shadowRoot.appendChild(childElement);
            
            // we have to negate one from the index for each append to the shadowRoot
            i--;
            
          }

        }
      }

    });
  </script>
</polymer-element>

<example-element>
  <p banana amount="1">one banana</p>
  <p apple>one apple</p>
  <p banana amount="2">two banana</p>
  <p banana amount="3">three banana</p>
  <p banana amount="0">no banana</p>
</example-element>

关于javascript - 如何在 Shadow DOM 中不渲染 <content> 标签中的内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27946059/

相关文章:

javascript - 等待 JavaScript 中元素的加载

javascript - <content> 标记不根据模板中的位置呈现

javascript - nedb post数据仅在重启后出现

javascript - 基于重复键过滤对象数组

selenium - 您如何为基于 Polymer (JS) 的应用程序编写端到端测试(大约 2015 年 5 月)?

javascript - 如何创建已附加影子根的自定义元素

javascript - 我有一个元素已声明为影子 dom,但样式正在影响其他元素

javascript - document.getElementsByName 返回 NULL,除非我查看 HTML 源

javascript - 如何防止首次运行后出现警报运行

javascript - polymer 元素表单未提交所有字段