我正在寻找查找页面上有多少 $ 符号的最佳方法。有没有比阅读 document.body.innerHTML
并计算其中有多少 $-as 更好的方法?
最佳答案
您的问题可以分为两部分:
- 如何获取没有HTML标签的网页文本内容?
我们可以稍微概括一下第二个问题。
- 我们如何找到字符串在另一个字符串中出现的次数?
“最好的方法”:
Amaan 找到了找到文本的想法,但让我们更进一步。
var text = document.body.innerText || document.body.textContent;
在代码中添加 textContent
可以帮助我们覆盖更多的浏览器,因为 innerText
并非所有浏览器都支持。
第二部分有点棘手。这完全取决于页面上“$”符号出现的次数。
例如,如果我们确定该符号在页面上至少出现一次,我们将使用以下代码:
text.match(/\$/g).length;
它对给定的字符串执行全局正则表达式匹配并计算返回数组的长度。它非常快速和简洁。
另一方面,如果我们不确定该符号是否至少出现在页面上一次,我们应该将代码修改为如下所示:
if (match = text.match(/\$/g)) {
match.length;
}
这只是检查匹配函数返回的值,如果它为空,则什么都不做。
我建议仅当页面中出现大量符号或您要多次执行搜索时才使用第三个选项。这是一个自定义函数(取自 here ),用于计算指定字符串在另一个字符串中的出现次数。它比其他两个表现更好,但更长且更难理解。
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 'benchmark'因此您可以自己比较这三种不同的方法。
另外:不,没有比获取正文文本并计算其中有多少个“$”符号更好的方法了。
关于javascript - 如何搜索 DOM 以计算在产品页面上找到的 $ 符号的数量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12659270/