自定义数据属性 - JavaScript - 如何从节点列表中选择元素
custom data attribute - JavaScript - how to select elements from node list
这是我的HTML:
<button class="btn" data-key="123456789">Show</button>
<button class="btn" data-key="abcdefghi">Show</button>
我也有具有匹配数据键属性的 iframe(即,对于每个带有键的按钮,都会有一个具有相同键的相应 iframe)。
当单击带有相应键的按钮时,我需要使用给定键抓取 iframe。
首先,我用给定的键抓取所有项目:
var keyElems = document.querySelectorAll('[data-key="' + key + '"]');
这将返回一个带有 iframe 和按钮的节点列表。在keyElems
中,我希望能够只获取 iframe 元素。为什么我不能做这样的事情?
var frame = keys.getElementsByTagName('iframe');
这似乎不起作用,我假设是因为键是一个节点列表。有没有比仅仅执行循环并检查元素是否是 iframe 更优雅的方法?
你只需要修改你的选择器来选择iframe
var keyElems = document.querySelectorAll('iframe[data-key="' + key + '"]');
如果您只希望返回一个 iframe,请改用querySelector
。它从NodeList
返回第一个元素
document.querySelectorAll
返回一个nodelist,而不是单个HTML元素,所以它没有方法querySelectorAll
。换句话说,不能链接querySelectorAll
方法调用。
但是你没有必要;只需修改你的选择器:
document.querySelectorAll('iframe[data-key="'+key+'"]');
对于更复杂的目的,需要更多计算并且仅扩展选择器不是一种选择,您可以利用array.prototype.filter
[].filter.call(document.querySelectorAll('[data-key="'+key+'"]'), function(el) {
return el.tagName == 'iframe';
});
相关文章:
- Angular:使用选择列表选择过滤代码中的对象
- JavaScript类列表选择器错误
- 将下拉列表“选择值”传递到 URL
- 禁用基于下拉列表选择 asp.net JavaScript 启用文本框
- 下拉列表<选择>为列表.js
- 经典 ASP - 下拉列表:选择与第一个下拉列表具有相同值的所有下拉列表
- 映射下拉列表选择到URL
- 删除基于先前下拉列表选择的“选择下拉列表”选项
- 在下拉列表选择中显示模态
- 下拉列表选择的值在UI淘汰js中没有更新
- 如何将 ID 分配给动态下拉列表选择
- 使用 dojo 将鼠标悬停在动态下拉列表选择上时添加工具提示
- 链接下拉列表选择列表代码 -- 连接数据
- Javascript 不遵循下拉列表选择
- 检索引导下拉列表选择文本
- 表单事件更改不适用于下拉列表选择
- 无法检测加载时的选择/下拉列表选择事件
- 将 CakePHP 命名参数添加到列表选择的 URL 中
- 为什么聚合物核心列表选择中的切换操作不正确
- 为列表选择类并仅设置其中一个类