You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用原生JavaScript selector获取无HTML标签包裹的击杀数字段

无标签包裹击杀数文本的获取方案

CSS 选择器本身不支持直接选取没有HTML标签包裹的纯文本节点,因此需要先定位到文本所属的父容器,再通过DOM节点属性过滤提取目标内容,具体实现如下:


实现逻辑说明

  1. 先通过常规选择器定位到每行数据的第二个<td>元素(即包含玩家名和击杀数的单元格)
  2. 遍历该<td>的所有子节点,筛选出nodeType = 3的文本节点(DOM规范中文本节点的nodeType固定为3)
  3. 去掉文本节点的前后空白和包裹的引号,转换为数字即可使用

完整可运行代码示例

// 存储所有玩家的击杀记录
const allKillData = []

// 遍历表格的每一行数据
document.querySelectorAll('table tr').forEach(tr => {
  // 获取当前行的怪物名称
  const monster = tr.querySelector('td:first-child b')?.textContent.trim()
  // 获取当前行的玩家名称
  const player = tr.querySelector('td:nth-child(2) b a')?.textContent.trim()
  // 跳过空行或格式不匹配的行
  if (!monster || !player) return

  // 定位到包含击杀数的单元格
  const killCountCell = tr.querySelector('td:nth-child(2)')
  let killCountStr = ''

  // 遍历单元格的所有子节点,筛选文本节点
  killCountCell.childNodes.forEach(node => {
    // 仅保留有实际内容的文本节点
    if (node.nodeType === 3 && node.textContent.trim().length > 0) {
      killCountStr = node.textContent.trim()
    }
  })

  // 去除文本中的引号,转换为数字,转换失败时默认赋值0
  const killCount = Number(killCountStr.replaceAll('"', '')) || 0

  // 存入结果数组
  allKillData.push({
    monster,
    player,
    killCount
  })
})

// 业务逻辑示例:判断玩家X是否击杀500只龙
const targetData = allKillData.find(item => item.player === '玩家X' && item.monster === '龙')
if (targetData && targetData.killCount >= 500) {
  // 此处写入你需要的触发逻辑,比如弹窗、展示提示等
  console.log(`玩家X击杀龙的数量已达到${targetData.killCount},满足触发条件`)
}

简化方案(适合固定结构场景)

因为你给出的HTML结构是固定的,第二个<td>的子节点顺序固定为[<b>元素, 击杀数文本节点, <br>元素],也可以直接通过下标取文本节点,代码更精简:

// 直接通过下标获取击杀数文本
const killCountCell = tr.querySelector('td:nth-child(2)')
const killCountStr = killCountCell.childNodes[1].textContent.trim()
const killCount = Number(killCountStr.replaceAll('"', '')) || 0

内容的提问来源于stack exchange,提问作者Emdelin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 07:06:03