簡體   English   中英

比較jQuery中的兩個字符串不起作用

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM