我正在为历史课做一个模拟审查谷歌。假设用户输入一个术语,脚本将检查它是“被阻止的”术语还是可搜索的术语。如果该术语被阻止,它将指向不同的页面,如果它是可搜索的,它将指向实际的页面。但是,在我的代码中,脚本不会提取被阻止的术语。有什么想法吗?
Javascript:
function searchCensor()
{
var keyTerms = document.getElementById("search").value;
var blockedTerms = new Array("censorship", "democracy");
var counter, blocked;
for(counter = 0; counter < blockedTerms.length; counter++) {
if(keyTerms == blockedTerms[counter])
blocked = 1;
else
blocked = 0;
}
switch(blocked)
{
case 1: window.location = "http://andrewgu12.kodingen.com/history/censor.php";
case 0: window.location = "https://www.google.com/search?q="+keyTerms;
}
}网址:http://andrewgu12.kodingen.com/history/
谢谢!
发布于 2012-04-27 03:29:43
仔细考虑你的循环:
for(counter = 0; counter < blockedTerms.length; counter++) {
if(keyTerms == blockedTerms[counter])
blocked = 1;
else
blocked = 0;
}如果搜索词是“审查”,那么第一次通过循环将blocked设置为1。但第二次通过循环,它将查看“审查”并将其与“民主”进行比较,然后将blocked设置为0。这实际上只在最后一个被阻止的术语与查询匹配时才将blocked设置为1。
您真正想要的是,如果有任何被阻止的术语与查询匹配,则将blocked设置为1:
var blocked = 0;
for (var counter = 0; counter < blockedTerms.length; counter++) {
if(keyTerms == blockedTerms[counter]) {
blocked = 1;
break; // Don't need to continue checking, we know it's blocked
}
}请注意,通常情况下,如果使用true和false作为这种标志,而不是数字(如果blocked = 3,这意味着什么?什么都没有)。代码将变成:
var blocked = false;
for (var counter = 0; counter < blockedTerms.length; counter++) {
if(keyTerms == blockedTerms[counter]) {
blocked = true;
break; // Don't need to continue checking, we know it's blocked
}
}
if (blocked) {
// ...
}
else {
// ...
}最后,如果您打算在由多个单词组成的查询中提取被审查的术语,您可以通过拆分搜索查询,然后检查这些术语中的任何一个是否被阻止(使用嵌套循环)来实现。或者,您可以使用正则表达式并完全消除循环:
var blocked =
new RegExp('\\b' + blockedTerms.join('\\b|\\b') + '\\b', 'i')
.test(keyTerms);发布于 2012-04-27 03:29:16
只有当你的最后一个被阻止的术语匹配时,这才会起作用。
您需要修改for循环,使其在找到匹配项时中断:
for(counter = 0; counter < blockedTerms.length; counter++) {
if(keyTerms == blockedTerms[counter])
{
blocked = 1;
break;
}
else
blocked = 0;
}发布于 2012-04-27 03:29:06
试试这个:
你应该:如果你发现阻塞就停下来,或者只是升起一面旗帜,永远不要再碰它(就像你做的那样)
首先我评估:blocked=0; //未被阻止
如果循环发现它的阻塞-所以阻塞得到'1‘。并保持为'1‘。
function searchCensor()
{
var keyTerms = document.getElementById("search").value;
var blockedTerms = new Array("censorship", "democracy");
var counter, blocked=0;
for(counter = 0; counter < blockedTerms.length; counter++) {
if(keyTerms == blockedTerms[counter])
blocked = 1;
}
switch(blocked)
{
case 1: window.location = "http://andrewgu12.kodingen.com/history/censor.php";
case 0: window.location = "https://www.google.com/search?q="+keyTerms;
}
}https://stackoverflow.com/questions/10340013
复制相似问题