0

私は、ユーザーが to do リスト項目を Web ページに追加したり、to do リスト項目を検索したりできる todo リストアプリケーションに取り組んでいます。以下では、検索機能に取り組んでいます。今何が起こるかというと、「あなたが見つけた」+ユーザーが検索した名前+その特定のアイテムに一致するタスクというliアイテムをページに追加することです。しかし、その名前が使用されているすべてのリスト項目を照合する方法がわかりません。たとえば、Bob という名前の人に 3 つの異なるタスクを実行させることができます。現在、この検索は最初の 1 つだけに一致しますが、3 つすべてに一致させたいと考えています。助言がありますか?

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);    
       }
      }      
     }    
    }
4

1 に答える 1

1

一致した todo の一時的なリストを保持し、最後に結果を出力します。

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);  
    } 
}
于 2013-03-08T20:28:12.657 に答える