使用jQuery无法提取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
相关产品推荐
相关产品推荐

