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

如何实现兼容所有浏览器的innerText式Twitter关注按钮文本提取

解决Twitter关注按钮状态判断的跨浏览器兼容问题

嘿,我明白你的困扰——旧版Firefox不支持innerText,用textContent又会把所有隐藏的按钮文本都读出来,根本没法判断当前到底是关注还是已关注状态。从你贴的HTML结构来看,Twitter是把所有可能的状态按钮都提前写在DOM里,靠CSS控制显隐,所以才会出现这种情况。下面给你几个靠谱的解决办法:

方法1:直接抓取可见的按钮文本

只有当前生效的状态按钮是可见的,其他都是隐藏的,我们可以利用offsetParent来筛选可见元素(元素隐藏时offsetParent会是null):

// 获取所有状态按钮,筛选出可见的那个
const allBtns = document.querySelectorAll('.user-actions-follow-button button');
const visibleBtn = [...allBtns].find(btn => btn.offsetParent !== null);

if (visibleBtn) {
  const currentStatus = visibleBtn.textContent.trim();
  console.log(currentStatus); // 只会显示当前可见的文本,比如"Follow"或"Following"
}

这个方法在所有浏览器(包括旧版Firefox)都能正常工作,非常可靠。

方法2:通过按钮类名直接判断状态(更高效)

观察HTML里的按钮类名,每个状态都有对应的专属类:

  • 未关注:follow-text
  • 已关注:following-text
  • 待确认:pending-text
  • 已拉黑:blocked-text

我们完全可以不用获取文本,直接通过类名+可见性来判断状态:

const btnContainer = document.querySelector('.user-actions-follow-button');

// 判断是否已关注
if (btnContainer.querySelector('.following-text').offsetParent !== null) {
  console.log('已经关注@Google啦');
} 
// 判断是否未关注
else if (btnContainer.querySelector('.follow-text').offsetParent !== null) {
  console.log('还没关注@Google哦');
}

这种方法比读文本更高效,也避免了文本可能出现的变动问题。

方法3:模拟innerText的通用函数(适合所有场景)

如果你需要一个通用的、模拟innerText行为的函数,也可以自己实现一个,只收集可见元素的文本:

function getVisibleText(element) {
  let result = '';
  const nodes = element.childNodes;

  for (let node of nodes) {
    if (node.nodeType === Node.TEXT_NODE) {
      result += node.textContent.trim();
    } else if (node.nodeType === Node.ELEMENT_NODE) {
      const style = window.getComputedStyle(node);
      // 检查元素是否可见
      const isVisible = style.display !== 'none' && style.visibility !== 'hidden' && style.opacity !== '0';
      if (isVisible) {
        result += getVisibleText(node);
      }
    }
  }
  return result.trim();
}

// 使用示例
const followBtn = document.querySelector('.user-actions-follow-button');
const statusText = getVisibleText(followBtn);
console.log(statusText); // 效果和innerText一致,只返回可见文本

这个函数递归遍历元素的所有子节点,只把可见元素的文本拼接起来,完美模拟innerText的效果,兼容所有浏览器。

小建议

优先用方法2,因为Twitter的按钮类名是官方定义的,稳定性很高,判断状态直接又高效。如果一定要获取文本,方法1足够简单好用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:23:45