Tho*_*ggi 10 javascript web-component riot.js
如果我有一个自定义riot标签,p其中包含:
<custom>
<p>This is a text</p>
</custom>
Run Code Online (Sandbox Code Playgroud)
如何<p>从<custom>标签内访问元素?
更新:我收到了一大堆答案,可以从DOM中选择它.我想要的是一种p从组件库 riot.js本身中选择内部标签的方法.我正在寻找更具骚动的具体答案.例如用聚合物使用this.$.content.getDistributedNodes().
pub*_*orn 15
Riot仅提供4个属性来访问您当前标记中的数据:
编辑
除此之外,您还可以直接访问named elements:
<my-tag>
<p name="foo">Hi, I'm foo</p>
<script>
console.log(this.foo);
</script>
</my-tag>
Run Code Online (Sandbox Code Playgroud)
/编辑
没有直接引用您在自定义标记中定义的任何元素; 剩下的就是纯粹的旧JS(你可能不喜欢或不喜欢).
与其他人一样,您可以使用dom方法访问元素.但是,在某些情况下,您需要等到实际加载DOM.例如:
<my-tag>
<p>yada</p>
<script>
console.log(this.root.querySelector('p'))
</script>
</my-tag>
Run Code Online (Sandbox Code Playgroud)
不起作用,因为DOM尚未准备好.而是将选择器包装在'mount'事件监听器中,如下所示:
<my-tag>
<p>yada</p>
<script>
this.on('mount', function() {
console.log(this.root.querySelector('p'))
})
</script>
</my-tag>
Run Code Online (Sandbox Code Playgroud)
如果您向内部标记添加id或name属性,则可以通过它访问它self.
// with 'id'
<custom><p id="pTest">Test</p></custom>
// with 'name'
<custom><p name="pTest">Test</p></custom>
Run Code Online (Sandbox Code Playgroud)
在js部分:
self = this
self.pTest
>> <p id=pTest>Test</p>
Run Code Online (Sandbox Code Playgroud)
在Riot v2.0.10中测试过
请参阅标签实例。
我们可以访问children.
customTagAndLoops = this.children
Run Code Online (Sandbox Code Playgroud)
也可以通过 DOM root。
iAmDom = this.root
childNodes = this.root.childNodes
p = this.root.querySelector('p')
Run Code Online (Sandbox Code Playgroud)
更新 - 2015 年 2 月 14 日
children属性在 Riot.js v2.0.9 中已废弃。访问子元素的唯一方法是使用root.