[英]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.