0

我需要设置通过 Javascript 创建的节点的属性。但是,由于值在整个脚本中不同函数的位置,它变得相当复杂。

我有一个构造函数:

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

然后我创建保存待办事项的 span 元素:

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设置为天数的任何想法?

4

1 回答 1

0

YourtodoItem是由Todo构造函数创建的 JS 对象,而不是像lior之类的 DOM 节点spanTodo。因此,它没有setAttribute方法,如果你想设置它的属性,只需分配给它(使用成员 operator):

todoItem.dueDate = daysL
于 2013-03-10T18:54:44.273 回答