[英]Comparing two strings in jQuery doesn't work
这是我的代码
function nameIsDuplicate(name){
objects = $("#content").find('p.itemOldName');
$(objects).each(function(i, object){
console.log("*"+($(object).text()).toLowerCase() + "*" + name.toLowerCase()+"*");
if(($(object).text()).toLowerCase() == name.toLowerCase())
return true;
});
return false;
}
我正在构建一个在线文件管理器系统。 name
参数是用户通过文本框提供的名称, $(object).text()
是当前目录中文件和文件夹的名称。 这些名称来自exec("ls")
命令。
我需要检查用户提供的名称是否已经存在。 因此,我将name
与每个文件/文件夹名称进行比较。 问题是它找不到重复项。 下图给出了以上代码的结果
return true
返回each
回调。 这对each
都没有影响(它只关心return false
),并且不做任何事情来设置nameIsDuplicate
的返回值。
您要在那里return false
(无需继续查找)并设置一个标志,以便您的nameIsDuplicate
可以返回它:
function nameIsDuplicate(name){
var duplicate = false;
objects = $("#content").find('p.itemOldName');
$(objects).each(function(i, object){
console.log("*"+($(object).text()).toLowerCase() + "*" + name.toLowerCase()+"*");
if(($(object).text()).toLowerCase() == name.toLowerCase()) {
duplicate = true;
return false; // Stop looping
}
});
return duplicate;
}
但是 ,使用Array.prototype.some
可以使该函数简单得多:
function nameIsDuplicate(name){
var objects = $("#content").find('p.itemOldName');
name = name.toLowerCase();
return objects.get().some(function(object) {
return $(object).text().toLowerCase() === name;
});
}
some
调用数组的每个条目的回调。 如果回调返回错误的值,则some
继续进行; 如果回调返回真实值,则some
停止。 如果对回调的调用返回了真实值,则some
的返回值是true
否则返回false
。
您的函数不返回true
,因为你在each
循环......应该是这样的:
function nameIsDuplicate(name){
var same=0;
objects = $("#content").find('p.itemOldName');
$(objects).each(function(i, object){
console.log("*"+($(object).text()).toLowerCase() + "*" + name.toLowerCase()+"*");
if(($(object).text()).toLowerCase() == name.toLowerCase()){
same=1;
return false;
}
});
if(same){
return true;
}else{
return false;
}
}
通过使回调函数返回false,可以在特定的迭代中破坏$ .each()循环。 返回非false与for循环中的continue语句相同; 它将立即跳至下一个迭代。
其他解决方案:
function nameIsDuplicate(name){
return $("#content").find('p.itemOldName').filter(function(){return $(this).text().toLowerCase() === name.toLowerCase();}).length;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.