我的一些javascript代码已经写了一个非常奇怪的问题。我已将此代码设置为在加载时执行。它的想法是从文本字段中删除一个值,如果它在另一个字段中列出。这是代码:
var diseases = document.getElementById("AffectedBy").value;
var diseasearray = diseases.split("-");
alert("disease array size: " + diseasearray.length);
for (i=0;i<diseasearray.length;i++)
if (diseases.match("-" + diseasearray[i]))
{
diseasearray[i] = "-" + diseasearray[i];
alert(diseasearray[i]);
document.getElementById("DiseaseNotSelected").value=document.getElementById("DiseaseNotSelected").value.replace(diseasearray[i],"")
}
上面的代码给出了一个3的数组大小(1个空白和2个值),但当我在警报中显示值时,它只显示2个值(1个空白和1个值)
这段代码:
var foods = document.getElementById("FoodFor").value;
var foodarray = foods.split("-");
alert("food array size: " + foodarray.length);
for (i=0;i<foodarray.length;i++)
if (foods.match("-" + foodarray[i]))
{
foodarray[i] = "-" + foodarray[i];
alert(foodarray[i]);
document.getElementById("FoodNotSelected").value=document.getElementById("FoodNotSelected").value.replace(foodarray[i],"")
}
上面的代码给出的数组大小为3(1个空白和2个值),当我在警报中显示值时,它只显示3个值(1个空白和2个值)。
任何人都可以看到为什么第一个代码块只显示数组中的2个项目的原因,因为我无法理解为什么,它现在真的让我烦恼。
答案 0 :(得分:4)
第一个是针对以' - '开头的字符串运行匹配。
我没有你的实际值,但是让我们说#AffectedBy的值是“test1-test2-test3”。
第一个警报将是3,因为疾病阵列将有三个组件(test1,test2,test3)
然后你会经历一个循环(0,1,2)。
第一个将失败,因为字符串中没有“-test1”,但其他两个将成功,因为有“-test2”和“-test3”子串。
答案 1 :(得分:1)
正如我在上面的评论中所说:要注意,无论你传入match的任何内容都会变成正则表达式。如果它包含一些特殊字符,则可能与您期望的不匹配(反之亦然)。
字符串White Spot (Ich)
将变为正则表达式/White Spot (Ich)/
;哪个不匹配White Spot (Ich)
但 匹配White Spot Ich
,因为括号是在正则表达式中对运算符进行分组。
更改正则表达式测试
diseases.match("-" + diseasearray[i])
进入普通字符串比较
diseases.indexOf("-" + diseasearray[i]) !== -1
你应该被设置。
(我想。: - )
答案 2 :(得分:0)
首先,你需要做的长度,例如foodarray.length -1。 您的阵列中有多少项(假设有)?我们需要更多解释