JavaScript-如何从节点列表中选择元素

JavaScript-如何从节点列表中选择元素,javascript,custom-data-attribute,Javascript,Custom Data Attribute,这是我的HTML: <button class="btn" data-key="123456789">Show</button> <button class="btn" data-key="abcdefghi">Show</button> 这将返回带有iframe和按钮的节点列表。在keyelms中,我希望能够获得iframe元素。为什么我不能这样做 var frame = keys.getElementsByTagName('iframe');

这是我的HTML:

<button class="btn" data-key="123456789">Show</button>
<button class="btn" data-key="abcdefghi">Show</button>
这将返回带有iframe和按钮的节点列表。在
keyelms
中,我希望能够获得iframe元素。为什么我不能这样做

var frame = keys.getElementsByTagName('iframe');

我认为这似乎不起作用,因为keys是节点列表。除了循环并检查元素是否为iframe之外,还有更优雅的方法吗?

您只需修改选择器以选择
iframe

var keyElems = document.querySelectorAll('iframe[data-key="' + key + '"]');

如果只希望返回一个iframe,请改用
querySelector
。它从
节点列表返回第一个元素

您只需修改选择器以选择
iframe

var keyElems = document.querySelectorAll('iframe[data-key="' + key + '"]');

如果只希望返回一个iframe,请改用
querySelector
。它从
节点列表
文档返回第一个元素。querySelectorAll
返回节点列表,而不是单个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';
});

document.querySelectorAll
返回一个节点列表,而不是一个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';
});

为什么要在3分钟后发布相同的答案?我在看到鲁乔丹的答案之前就开始写了,你觉得不可思议吗?他正确地获得了最初的选票。我试图通过添加更多信息来区分我的答案。为什么在3分钟后发布相同的答案?我在看到RUJordan的答案之前就开始写了,你觉得不可思议吗?他正确地获得了最初的选票。我试图通过添加更多的信息来区分我的答案。很好,这是我一直在寻找的语法缺失部分。谢谢很高兴我能帮忙。:)太好了,这就是我一直在寻找的语法缺失部分。谢谢很高兴我能帮忙。:)这通常表明存在更深层次的设计问题。考虑使用数组或对象来表示应用程序数据,您所做的是有效地查询应用程序的表示层,以获得其状态。这通常表示一个更深层次的设计问题。考虑使用数组或对象来表示应用程序数据,您所做的是有效地查询应用程序的呈现层,以便获得其状态。