2013-03-10 57 views
0

我需要設置通過Javascript創建的節點的屬性。但是,由於整個腳本中的值位於不同的函數中,因此它變得非常複雜。將自定義屬性追加到動態創建的節點javascript

我有一個構造函數:

function Todo(id, task, who, dueDate) { 
    this.id = id; 
    this.task = task; 
    this.who = who; 
    this.dueDate = dueDate; 
    this.done = false; 
} 

然後,我創建持有的待辦事項跨度元素:

function createNewTodo(todoItem) { 
    var li = document.createElement("li"); 
    li.setAttribute("id", todoItem.id); 

    var spanTodo = document.createElement("span"); 
    spanTodo.innerHTML = 
     todoItem.who + " needs to " + todoItem.task + " by " + todoItem.dueDate; 
    li.appendChild(spanTodo); 
return li; 
} 

然後,我從我用它來設定誰在頁面上的表單中獲取值,和任務。還有日期,但是稍微複雜一些,因爲我最終在代碼中稍後將該值用於獲取當前日期和輸入日期之間的差異。

function getFormData() { 
    var task = document.getElementById("task").value; 
    if (checkInputText(task, "Please enter a task")) return; 

    var who = document.getElementById("who").value; 
    if (checkInputText(who, "Please enter a person to do the task")) return; 

    var adate = document.getElementById("dueDate").value; 
    var reString = new RegExp("[0-9]{4}\\-\[0-9]{2}\\-\[0-9]{2}"); 

    var date = compareDates(date); 
    var id = (new Date()).getTime(); 
    var todoItem = new Todo(id, task, who, date); 
    todos.push(todoItem); 
    addTodoToPage(todoItem); 
    saveTodoItem(todoItem); 
} 

所以,天是我想要的價值。我想將dueDate設置爲相等的天數,以便我可以在createNewToDo函數的innerHTML中使用該值。

function compareDates(date) { 
    var days = Math.floor(daysCal); 
    console.log(date); 
    todoItem.setAttribute("dueDate", days); 
    if (cdate < date) { 
    console.log("you have" + " " + days + " " + "more day(s)"); 
    } 
    else if (cdate > date) { 
    console.log("you are" + " " + -days + " " + "day(s) overdue"); 
    } 
} 

對修改的任何想法設置dueDate的值的天?

回答

0

您的todoItem是由Todo構造函數創建的JS對象,而不是像lispanTodo這樣的DOM節點。因此,它沒有setAttribute方法,並且如果您要設置它的屬性,只需指定它(使用member operator):

todoItem.dueDate = daysL