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
,则可以正常工作。)您的问题可以分为两部分:
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,这样您就可以自己比较这三种不同的方法了
另外:不,没有比获取正文文本并计算有多少“$”符号更好的方法了