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

使用jQuery无法提取td内目标文本,排除button内容的问题求助

解决获取td标签内文本并排除button内容的问题

我来帮你搞定这个问题~你之前用的:not('button')选择器没效果,是因为这个选择器是用来筛选元素本身的,而你选中的是#sqty这个td元素,它本身就不是button,所以这个选择器根本没起到排除子元素button的作用,text()方法还是会获取td下所有后代的文本内容,包括button里的。

下面给你几个有效的解决方法:

方法1:筛选文本节点

通过contents()获取td下的所有节点,然后过滤出纯文本节点,这样就能直接拿到你要的“1”:

var pickQty = $(".exchange-panel .prod-in-bill").find("#" + id)
  .find("#sqty")
  .contents()
  .filter(function() {
    return this.nodeType === 3; // 只保留文本类型的节点
  })
  .text()
  .trim() // 去除文本前后的空格
  .replace(/[^a-z0-9\s]/gi, '')
  .replace(/[_\s]/g, '');

方法2:克隆元素并移除button

先克隆目标td,然后移除克隆体里的button元素,再获取剩余文本:

// 克隆td元素
var clonedTd = $(".exchange-panel .prod-in-bill").find("#" + id).find("#sqty").clone();
// 移除克隆体里的button
clonedTd.find('button').remove();
// 处理文本
var pickQty = clonedTd.text().trim()
  .replace(/[^a-z0-9\s]/gi, '')
  .replace(/[_\s]/g, '');

方法3:直接获取第一个文本节点

如果目标文本始终是td的第一个子节点(就像你案例里的情况),可以直接获取这个节点的内容:

var pickQty = $(".exchange-panel .prod-in-bill").find("#" + id)
  .find("#sqty")[0]
  .firstChild.textContent
  .trim()
  .replace(/[^a-z0-9\s]/gi, '')
  .replace(/[_\s]/g, '');

这几种方法都能帮你精准拿到td里的“1”,同时排除button的文本内容,你可以根据自己的场景选择最合适的一种~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 04:13:59