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


function updateDone(e) { 
      var spanClicked = e.target;
      var id = spanClicked.parentElement.id;
      spanClicked.innerHTML = " ✔ ";
      spanClicked.setAttribute("class", "done");
      console.log("you clicked this span" + id);


      for(var i = 0; i < todos.length; i++) {
        if (todos[i].id == id) {
            var mark = todos[i];
            mark.setAttribute("class", "done");
            console.log(mark);
            break;
            }
           } 
    }

此函数的第一部分更新网页以显示对象已“完成”。第二部分是我遇到问题的地方。我正在尝试将对象更新为数组内的“完成”。这个想法是将用户单击的 id 与数组中的 id 匹配,然后使用 setAttribute 将其设置为“完成”。但是,我为 console.log(mark) 获得的控制台消息是 mark.setAttribute 不是函数。关于如何修改它以便我可以将数组中的对象更新为“完成”的任何建议?

4

3 回答 3

0

使用 setAttribute 设置类不是一个好主意。

//Works with FF and Chrome
obj.setAttribute("class", "done");

//works with IE
obj.setAttribute("className", "done");

//works with all browsers
obj.className = "done";
于 2013-02-21T18:51:19.733 回答
0
for(var i = 0; i < todos.length; i++) {
    if (todos[i].id == id) {
        var element = document.getElementById(todos[i].id);
        element.setAttribute("class", "done");
        console.log(element);
        break;
    }
}

或者如果您的示例中的“mark”不是 DOM 对象,那么您只需将它的 done 属性设置为 true。

for(var i = 0; i < todos.length; i++) {
    if (todos[i].id == id) {
        todos[i].done = true;
        console.log(todos[i]);
        break;
    }
}
于 2013-02-21T18:52:40.710 回答
0

嘿@user2084813 我知道这看起来有点矫枉过正,但从长远来看它会很有用。JQuery 具有跨浏览器工作的功能(无需检查验证),允许您检查/添加/删除类。IE 通常以不同的方式处理删除。

http://api.jquery.com/hasClass/

http://api.jquery.com/addClass/

http://api.jquery.com/removeClass/

于 2013-02-21T18:59:44.493 回答