javascript - 如何从 querySelector 返回几个值?
问题描述
我正在尝试使用查询选择器从下拉菜单中获取具有值和内部文本的对象:
<label>
<span>Project :</span>
</label>
<select name="projectId">
<option value="1">foo</option>
<option value="2">bar</option>
</select>
我想要一个看起来像这样的对象:
{
"1":"foo",
"2":"bar"
}
这就是我来自的地方
let options = await page.evaluate(() => {
return document.querySelector('select[name=projectId]').innerText;
});
但我只得到一串内部文本我无法弄清楚如何实现我的目标,有人可以帮忙吗?
解决方案
您可以使用document.querySelectorAll
获取所有选项元素,展开语法将其转换为数组,Array#map
提取每个选项的值和文本,并将Object.fromEntries
其转换为单个对象。
const res = Object.fromEntries(
[...document.querySelectorAll("select[name=projectId] > option")]
.map(o => [o.value, o.text]));
console.log(res);
<label>
<span>Project :</span>
</label>
<select name="projectId">
<option value="1">foo</option>
<option value="2">bar</option>
</select>
推荐阅读
- javascript - 如何为元素上的鼠标悬停触发不同元素上的鼠标悬停?
- ios - 向 iOS 设备发送 POST 请求
- android-emulator - 为什么 Hexm 一直在 Android Studio 中安装
- javascript - Angular - 打开模式会导致“内容安全策略(script-src 'self')错误”
- powerbi - IBM DB2 ODBC 驱动程序 - 用于 Power BI 连接的 DB2COPY1 或 IBMDBCL1?
- swift - 列出 macOS Big Sur 目录中的所有文件
- oracle-apex - 使用动态操作重定向/刷新页面 - Oracle Apex 21.1
- react-native - 如何使带有borderRadius的视图透明?
- sqlite - 用“ON DELETE CASCADE”续集改变现有表
- matlab - 如何在 Matlab 中拟合衰减指数函数