2013-03-08 53 views
0

我正在處理待辦事項列表應用程序,用戶可以在其中將用戶添加到列表項目中以進行列表項目的搜索以及搜索列表項目。下面我正在研究搜索功能。現在發生的事情是,我將一個li項添加到頁面上,顯示「你找到」+用戶搜索的名字+匹配該特定項目的任務。但是,我不知道該怎麼做就是匹配使用該名稱的每個列表項目。例如,我可以讓一個名叫鮑勃的人做三個不同的任務。現在這個搜索將只匹配第一個,但我想匹配所有三個。有什麼建議麼?匹配每個字符串的使用

function search() { 
    var searchTerm = document.getElementById("search").value; 
    searchTerm = searchTerm.trim(); 

    if(searchTerm == null || searchTerm == "") { 
    alert("Please enter a string to search for"); 
    return; 
    } 
    else { 
    var todoObj = undefined; 
    results = undefined; 
    re = undefined; 

    for(var i = 0; i < todos.length; i++) { 
    todoObj = todos[i]; 
    re = new RegExp(searchTerm, "ig"); 
    resultsOne = todoObj.who.match(re); 
    if(resultsOne) { 
     var ul = document.getElementById("test"); 
     var li = document.createElement(li); 
     li.className = "listItem"; 
     li.innerHTML = "You found " + todoObj.who + " who needs to " + todoObj.task; 
     ul.appendChild(li);  
     } 
     }  
    }  
    } 
+0

在我看來喜歡它應該工作。每個匹配創建一個新的LI並將其附加到UL。你可以創建一個演示它的小提琴嗎? – Barmar 2013-03-08 20:23:57

+0

它看起來像是在'for'循環的每次迭代中執行搜索匹配,然後立即顯示結果。我可能會建議你保留一個匹配的待辦事項列表,然後最後輸出結果。 – sweetamylase 2013-03-08 20:24:21

回答

1

保持待辦事項的匹配,那麼最後的臨時列表,到了最後,輸出結果:

var matchedTodos = []; // temporary list of matched todos 

for(var i = 0; i < todos.length; i++) { 
    todoObj = todos[i]; 
    re = new RegExp(searchTerm, "ig"); 
    resultsOne = todoObj.who.match(re); 
    if(resultsOne) { 
     // found a match, add it to our temporary list 
     matchedTodos.push(todoObj); 
    } 
} 

// now output the matched todos 

if (matchedTodos.length > 0) { 
    var ul = document.getElementById("test"); 
    var li = document.createElement("li"); 
    li.className = "listItem"; 
    var tasks = ''; 
    var todoObj = null; 
    for(var j = 0; j < matchedTodos.length; j++) { 
     todoObj = matchedTodos[j]; 
     tasks += todoObj.task + ', '; 
    } 
    li.innerHTML = "You found " + todoObj.who + " who needs to " + tasks; 
    ul.appendChild(li); 
} 

你所要的輸出是這樣"You found Bob who needs to clean his room, take a bath, sleep"。你將不得不增加一些邏輯用於獲取的,逗號正確數量的判決是正確的:P

編輯:有他們所有的個人列表項:

var matchedTodos = []; // temporary list of matched todos 

for(var i = 0; i < todos.length; i++) { 
    todoObj = todos[i]; 
    re = new RegExp(searchTerm, "ig"); 
    resultsOne = todoObj.who.match(re); 
    if(resultsOne) { 
     // found a match, add it to our temporary list 
     matchedTodos.push(todoObj); 
    } 
} 

// now output the matched todos 

if (matchedTodos.length > 0) { 
    var ul = document.getElementById("test"); 
    var todoObj = null; 
    for(var j = 0; j < matchedTodos.length; j++) { 
     var li = document.createElement("li"); 
     li.className = "listItem"; 
     todoObj = matchedTodos[j]; 
     li.innerHTML = "You found " + todoObj.who + " who needs to " + todoObj.task; 
     ul.appendChild(li); 
    } 
} 
+0

這是偉大的,但我想我應該添加每個作爲一個單獨的列表項目 – user2084813 2013-03-08 20:51:18

+0

@ user2084813然後,這更簡單!查看編輯。 – sweetamylase 2013-03-08 20:54:21

+0

完美!非常感謝 – user2084813 2013-03-08 20:58:57