javascript - 搜索元素的内容并单击其父项
问题描述
我正在尝试创建一个扩展,单击用户给出的价格项目。这是相关的popup.html:
<input style="display:none" /><input type="text" id="userInput" value='' />
<button id="clickme">Run</button>
单击“clickme”时,它会运行此 popup.js:
document.getElementById('clickme').addEventListener('click', function() {
var price = '$'+ document.getElementById("userInput").value+".00";
alert(price);
$("p:contains("price")").parentNode.click();
});
如果您在表单中键入所需的价格为 48,它会返回一个价值为 $48.00 的警报。
然后它会点击该价格的项目,但这目前不起作用。这是我试图在其上运行扩展的网站相关部分的代码(不是我的网站):
<div class="grid__item wide--one-fifth large--one-quarter medium-down--one-half">
<a href="/collections/1seventeenweek7/products/copy-of-supreme-dazzle-warm- up-top-red" class="grid-link text-center">
<p class="grid-link__title">Supreme Corner Cap Light Blue</p>
<p class="grid-link__meta">
<span class="visually-hidden">Regular price</span>
$48.00
</p>
</a>
</div>
我试图让它搜索包含 $48.00 的 p 元素,然后单击作为父元素的 a 元素,但这目前不起作用。我究竟做错了什么?- 谢谢
解决方案
干得好。这会奏效!
document.getElementById('clickme').addEventListener('click', function() {
var price = '$'+document.getElementById('userInput').value+'.00'
var metas = document.getElementsByClassName('grid-link__meta')
alert(price)
for (let i = 0; i < metas.length; i++) {
if (metas[i].innerHTML.includes(price)) metas[i].parentNode.click()
break
}
})
就个人而言,我真的很想使用类似下面的东西,但我忘记了getElementsByClassName
它不会返回一个数组,而是一个 NodeList 对象。
var price = '$'+document.getElementById('userInput').value+'.00'
var metas = document.getElementsByClassName('grid-link__meta')
var match = metas.find((curr) => curr.innerHTML.includes(price))
match.parentNode.click()
推荐阅读
- vue.js - 如何在vuetify中将导航抽屉放在移动应用栏下?
- assembly - 从机器代码中删除空字节的脚本?
- android - 如何从文件管理器打开应用程序并直接播放视频?
- r - 使用 Dplyr 计算行百分比
- bash - Sed 语法差异 MacOS 与 GNU
- python - 使用 win32com 更新链接,其中 excel 与多个源链接
- html - 试图将两个堆叠的图像与css中的一个单独的图像对齐
- azure-data-factory - 如何在 Datafactory 中将 base 64 文件转换为 pdf
- python - 文本特征的后期融合
- python - 如何根据第 2 列的条件从数据框的第 1 列删除行?