Javascript 如何搜索DOM以计算在产品页面上找到的$symbol的数量?

Javascript 如何搜索DOM以计算在产品页面上找到的$symbol的数量?,javascript,html,dom,Javascript,Html,Dom,我正在寻找找到一个页面上有多少个$符号的最佳方法。有没有比阅读document.body.innerHTML和计算其上有多少$-更好的方法?您可能应该使用document.body.innerText或document.body.textContent来避免HTML给您带来误报 像这样的方法应该会奏效: document.body.innerText.match(/\$/g).length; 我能想到的另一种方法是这样使用: var len = 0; while(window.find('$'

我正在寻找找到一个页面上有多少个$符号的最佳方法。有没有比阅读
document.body.innerHTML
和计算其上有多少$-更好的方法?

您可能应该使用
document.body.innerText
document.body.textContent
来避免HTML给您带来误报

像这样的方法应该会奏效:

document.body.innerText.match(/\$/g).length;
我能想到的另一种方法是这样使用:

var len = 0;
while(window.find('$') === true){
    len++;
}
if (match = text.match(/\$/g)) {
  match.length;
}

(这可能不可靠,因为这取决于用户上次单击的位置。如果您在任何用户交互之前进行
onload
,则可以正常工作。)

您的问题可以分为两部分:

  • 如果没有HTML标签,我们如何获取网页文本内容的信息
  • 我们可以稍微概括一下第二个问题

  • 如何在另一个字符串中找到字符串出现的次数
  • “最好的方法是:

    阿曼找到文本的想法是正确的,但让我们更进一步

    var text = document.body.innerText || document.body.textContent;
    
    向代码中添加
    textContent
    有助于我们覆盖更多浏览器,因为并非所有浏览器都支持
    innerText

    第二部分有点棘手。这完全取决于页面上出现的“$”符号的数量

    例如,如果我们确定页面上至少出现一个符号,我们将使用以下代码:

    text.match(/\$/g).length;
    
    它对给定字符串执行全局正则表达式匹配,并计算返回数组的长度。它非常快速和简洁

    另一方面,如果我们不确定该符号是否至少出现在页面上一次,则应修改代码,使其如下所示:

    var len = 0;
    while(window.find('$') === true){
        len++;
    }
    
    if (match = text.match(/\$/g)) {
      match.length;
    }
    
    这只是检查match函数返回的值,如果为null,则不执行任何操作

    我建议仅当页面中出现大量符号或要执行多次搜索时,才使用第三个选项。这是一个自定义函数(取自),用于计算指定字符串在另一个字符串中的出现次数。它的性能比其他两个更好,但更长,更难理解

    var occurrences = function(string, subString, allowOverlapping) {
      string += "";
      subString += "";
      if (subString.length <= 0) return string.length + 1;
      var n = 0,
          pos = 0;
      var step = (allowOverlapping) ? (1) : (subString.length);
      while (true) {
        pos = string.indexOf(subString, pos);
        if (pos >= 0) {
          n++;
          pos += step;
        } else break;
      }
      return (n);
    };
    
    occurrences(text, '$');
    
    var引用=函数(字符串、子字符串、allowOverlapping){
    字符串+=“”;
    子字符串+=“”;
    if(subString.length=0){
    n++;
    pos+=步进;
    }否则就断了;
    }
    返回(n);
    };
    出现次数(文本“$”);
    
    我还包含了一个小JSFIDLE,这样您就可以自己比较这三种不同的方法了

    另外:不,没有比获取正文文本并计算有多少“$”符号更好的方法了