1

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

4

2 回答 2

3

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

  1. 我们如何获取没有 HTML 标签的网页文本内容?

我们可以稍微概括一下第二个问题。

  1. 我们如何在另一个字符串中找到字符串出现的次数?

以及“做到这一点的最佳方法”:

Amaan 得到了找到文本的正确想法,但让我们更进一步。

var text = document.body.innerText || document.body.textContent;

添加textContent到代码中有助于我们覆盖更多浏览器,因为innerText并非所有浏览器都支持。

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

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

text.match(/\$/g).length;

它对给定的字符串执行全局正则表达式匹配并计算返回数组的长度。它非常快速和简洁。

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

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, '$');

我还包括一个小的 jsfiddle '基准',所以你可以自己比较这三种不同的方法。

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

于 2012-09-30T09:57:18.030 回答
0

您可能应该使用document.body.innerTextdocument.body.textContent避免让您的 HTML 给您带来误报。

像这样的东西应该工作:

document.body.innerText.match(/\$/g).length;

我能想到的另一种方法是window.find像这样使用:

var len = 0;
while(window.find('$') === true){
    len++;
}

onload(这可能不可靠,因为它取决于用户最后单击的位置。如果您在任何用户交互之前这样做,它将正常工作。)

于 2012-09-30T07:15:11.550 回答