从网页中获取格式为“_ (10 RANDOM CHARACTERS)”的所有元素 javascript
Get all elements in the format "_ (10 RANDOM CHARACTERS) " from a webpage javascript
我的网页有一个 table,里面有 table 行,格式如下
<tr id="_C15DKNWCSV">text</tr>
我正在尝试扫描网页并获取所有符合以下格式的 table 行:
id="_(10 RANDOM CHARACTERS)"
并将它们放在一个数组中,
我知道这与 querySelectorAll 有关,但我无法使用随机字符过滤器。
代码和我所做的:
我尝试了以下方法:
var current_queue_items = document.getElementById("v_viewable_items").querySelectorAll("[id^='_']")
虽然这不是很稳健,但如果某些东西碰巧以“_”开头,它会被接受,我也可能会添加一个 IF 语句,它只在它的 11 个字符长时才接受它。
只使用querySelectorAll是不行的,所以一个可行的解决方案是使用querySelectorAll获取所有以“_”开头的元素,然后用正则表达式过滤。
这里我做一个例子,将文本附加到所有选定的 TR
脚本:
var customSelect = function() {
var startWith_= [...document.querySelectorAll('tr[id^=_]')];
var selected = startWith_.filter(e => /\_.{10}$/.test(e.id));
// Do what you want here. . .
selected.forEach( e => e.append('TR selected'));
}
Html 测试:
<button onclick='customSelect()' >Custom Select</button>
<br />
<table>
<tr id="_ABCEF56789">
<td>It's ok</td>
</tr>
<tr id="_0123456789">
<td>It's ok</td>
</tr>
<tr id="_01234567890">
<td>It has more</td>
</tr>
<tr id="_ABCEFghijk">
<td>It's ok</td>
</tr>
<tr id="_012345678">
<td>It has less</td>
</tr>
<tr id="A0123456789">
<td>It start with no _</td>
</tr>
<table>
Sebastian 的回答是好的,但缺乏对发生的事情的解释。
属性选择器提供了一些用于匹配属性值的选项,但它们不像正则表达式那样全面。在这种情况下,您能做的最好的事情可能就是尽可能地限制初始选择,然后过滤掉您想要的内容。
所以你可以使用:
- 仅获取 TR 元素的 TR 选择器
- ID 的属性选择器
- "^"以选择器开头,获取ID以下划线开头的那些
然后你可以使用正则表达式过滤掉你不想要的,例如
var current_queue_items = [...document.getElementById("v_viewable_items")
.querySelectorAll("TR[id^='_']")]
.filter(node => /^_.{10}$/.test(node.id));
return "v_viewable_items" table 或 tbody 或任何具有符合正则表达式 /^_.{10}$/
的 ID 的 TR 元素数组。
你也可以这样做:
document.getElementById("v_viewable_items")
.querySelectorAll("TR[id^='_']")
.forEach(node => {
if (/^_.{10}$/.test(node.id)) {
// do stuff with node
}
});
PS 我不喜欢这样 "dot chaining" 但是作为一个例子,它简洁明了。
请注意,如果 "v_viewable_items" 是 table 或 tbody,那么您还可以这样做:
let current_queue_items = [...document.getElementById("v_viewable_items").rows]
.filter(row => /^_.{10}$/.test(row.id));
或者像上面那样使用 forEach 而不是 filter。
我的网页有一个 table,里面有 table 行,格式如下
<tr id="_C15DKNWCSV">text</tr>
我正在尝试扫描网页并获取所有符合以下格式的 table 行:
id="_(10 RANDOM CHARACTERS)"
并将它们放在一个数组中,
我知道这与 querySelectorAll 有关,但我无法使用随机字符过滤器。
代码和我所做的:
我尝试了以下方法:
var current_queue_items = document.getElementById("v_viewable_items").querySelectorAll("[id^='_']")
虽然这不是很稳健,但如果某些东西碰巧以“_”开头,它会被接受,我也可能会添加一个 IF 语句,它只在它的 11 个字符长时才接受它。
只使用querySelectorAll是不行的,所以一个可行的解决方案是使用querySelectorAll获取所有以“_”开头的元素,然后用正则表达式过滤。
这里我做一个例子,将文本附加到所有选定的 TR
脚本:
var customSelect = function() {
var startWith_= [...document.querySelectorAll('tr[id^=_]')];
var selected = startWith_.filter(e => /\_.{10}$/.test(e.id));
// Do what you want here. . .
selected.forEach( e => e.append('TR selected'));
}
Html 测试:
<button onclick='customSelect()' >Custom Select</button>
<br />
<table>
<tr id="_ABCEF56789">
<td>It's ok</td>
</tr>
<tr id="_0123456789">
<td>It's ok</td>
</tr>
<tr id="_01234567890">
<td>It has more</td>
</tr>
<tr id="_ABCEFghijk">
<td>It's ok</td>
</tr>
<tr id="_012345678">
<td>It has less</td>
</tr>
<tr id="A0123456789">
<td>It start with no _</td>
</tr>
<table>
Sebastian 的回答是好的,但缺乏对发生的事情的解释。
属性选择器提供了一些用于匹配属性值的选项,但它们不像正则表达式那样全面。在这种情况下,您能做的最好的事情可能就是尽可能地限制初始选择,然后过滤掉您想要的内容。
所以你可以使用:
- 仅获取 TR 元素的 TR 选择器
- ID 的属性选择器
- "^"以选择器开头,获取ID以下划线开头的那些
然后你可以使用正则表达式过滤掉你不想要的,例如
var current_queue_items = [...document.getElementById("v_viewable_items")
.querySelectorAll("TR[id^='_']")]
.filter(node => /^_.{10}$/.test(node.id));
return "v_viewable_items" table 或 tbody 或任何具有符合正则表达式 /^_.{10}$/
的 ID 的 TR 元素数组。
你也可以这样做:
document.getElementById("v_viewable_items")
.querySelectorAll("TR[id^='_']")
.forEach(node => {
if (/^_.{10}$/.test(node.id)) {
// do stuff with node
}
});
PS 我不喜欢这样 "dot chaining" 但是作为一个例子,它简洁明了。
请注意,如果 "v_viewable_items" 是 table 或 tbody,那么您还可以这样做:
let current_queue_items = [...document.getElementById("v_viewable_items").rows]
.filter(row => /^_.{10}$/.test(row.id));
或者像上面那样使用 forEach 而不是 filter。