Javascript 使用正则表达式搜索元素的节点列表
这是跨度的样子Javascript 使用正则表达式搜索元素的节点列表,javascript,regex,Javascript,Regex,这是跨度的样子 var spans = document.querySelectorAll('#divConfirm span'); spans.length = 43. 跨度:[预订确认, 预订号码:604905, 游览日期:2016年8月1日... 这个跨度列表包含数据,每个跨度都有一个id属性。我想用正则表达式搜索这个id来检索相应的数据点 我通常会做一些类似于span.querySelectorAll(“span[id*='OrderNumber']”[0]。 但
var spans = document.querySelectorAll('#divConfirm span');
spans.length = 43.
跨度:[预订确认, 预订号码:604905, 游览日期:2016年8月1日...
这个跨度列表包含数据,每个跨度都有一个id
属性。我想用正则表达式搜索这个id
来检索相应的数据点
我通常会做一些类似于span.querySelectorAll(“span[id*='OrderNumber']”[0]。
但是由于所有的元素都已经是span
了,所以它似乎不起作用
如何基于regex搜索span?我考虑过将span节点列表转换为数组,但Google表示不能将regex与indexOf
一起使用,因此将queryselectoral()
与节点列表和regex*=
一起使用似乎是一种可行的方法
例如,如何检索span中的第二项,
OrderNumber
span元素?在节点列表对象中没有querySelectorAll
方法。因此,您不能在span
节点列表上使用querySelectorAll
但您可以使用手写的列表过滤器,如下所示:
spans: [<span id="ctl00_cphBody_lblTitleOrder" style="color:#003300;font-family:Verdana;font-size:18px;">Reservation Confirmation</span>, <span id="ctl00_cphBody_lblOrderNumber" style="color:#003300;font-family:verdana;font-size:20px;">Reservation Number: 604905</span>, <span id="ctl00_cphBody_lblDate" style="color:#003300;font-family:Verdana;font-size:18px;">Excursion Date: 8/1/2016</span>...
或在ES6中:
var filtered = Array.prototype.filter.call(spans, function (item) {
return /OrderNumber/.exec(item.id);
});
另一种方法是存储对#divConfirm
元素的引用,然后在其上使用querySelectorAll
:
let filtered = Array.prototype.filter.call(spans, (item) => /OrderNumber/.exec(item.id));
只需省略
span
:span.queryselectoral([id*='OrderNumber'])[0]
。或者,更好的是,为什么不使用document.getElementById(OrderNumber)
?谢谢,但未捕获类型错误:span.queryselectoral不是函数(…)Regex是用于此作业的错误工具,请修复您的查询选择器:document.querySelector(“#divConfirm span[id*=”OrderNumber“])
。当然,这是一个愚蠢的选择器,当您只需更新元素以使用类,然后就可以使用文档进行选择。querySelector('.confirm.OrderNumber')
@zzzzBov可以工作。但从技术上讲,它会“更好”吗要缩小所需html的范围,只需一次,然后通过这个较小的部分进行搜索?@DougFir no.原生DOM查询比解释的JS更快,后者随后会运行自己的劣质搜索。甚至考虑这样一个选择器的性能都是过早的优化。
var filtered = divConfirm.querySelectorAll('span[id*="OrderNumber"]');