让js区分div

时间:2014-11-29 05:00:30

标签: javascript jquery

我正在创建一个javascript应用程序,这是一个待办事项列表,用户可以在其中输入任务,它出现在下面的列表中,他们可以在这里重新排序任务或检查任务。我遇到的一个问题是,我希望创建的每个任务div都有不同的背景颜色。因为我有它,所以列表作为一个整体改变背景颜色,但不是单独的每个任务(我明白为什么会这样)我想知道是否有人有一个简单的解决方案,以便添加的每个任务具有不同的背景颜色(或者我在RandomColor函数中的颜色之间交替。)下面是相关的代码片段。

JS:

$(document).ready(function () {
    $('#tbtask').focus();
    $('#btnaddtask').button();
    $('#tbTask').addClass("ui-corner-all");
    $(document)

    .on('click', '#btnaddtask', function () {
        var newTask = $('#tbTask').val();

        if (newTask == "") {
            alert("Please enter a task!");
        }

        if (newTask) {
            RandomColor();
            $('#tasklist').append('<div class="taskdiv"><input type="checkbox" class="task" 
value="' + newTask + '" />' + newTask + '</div>');

        }
        $('#tbtask').val("").focus();
    })

function RandomColor() {
    var color = '#';
    var letters = ['000000','FF0000','00FF00','0000FF','FFFF00','00FFFF','FF00FF','C0C0C0'];
      color += letters[Math.floor(Math.random() * letters.length)];
      document.getElementById('tasklist').style.background = color;
     }

2 个答案:

答案 0 :(得分:0)

也许尝试这样的事情......

$(document).ready(function () {
    $('#tbtask').focus();
    $('#btnaddtask').button();
    $('#tbTask').addClass("ui-corner-all");
    $(document).on('click', '#btnaddtask', function () {
        var newTask = $('#tbTask').val();

        if (newTask == "") {
            alert("Please enter a task!");
        }

        if (newTask) {
            $('#tasklist').append('<div class="taskdiv"><input type="checkbox" class="task" value="' + newTask + '" />' + newTask + '</div>');
            $('#tasklist .taskdiv:nth-last-child(1)').css('background-color', RandomColor());
        }
        $('#tbtask').val("").focus();
    });

function RandomColor() {
    var color = '#';
    var letters = ['000000','FF0000','00FF00','0000FF','FFFF00','00FFFF','FF00FF','C0C0C0'];
    color += letters[Math.floor(Math.random() * letters.length)];

    return color;
}

答案 1 :(得分:0)

我认为保罗有正确的想法。您想要从RandomColor(我将其重命名为getRandomColor,因为我认为函数应该是动词)返回一种颜色,并在将其插入列表之前使用该颜色设置新列表项的样式。这是一个类似的答案,但清理了一下(IMO):

$(document).ready(function () {
    // protip: cache this object, so you don't have to keep searching the DOM
    var $tbtask = $('#tbtask');

    $tbtask.focus();
    $tbtask.addClass("ui-corner-all");

    $('#btnaddtask').button();

    $(document).on('click', '#btnaddtask', function () {
        var newTask = $('#tbTask').val();

        if (!newTask) {
            alert("Please enter a task!");
        } else {

            // create a variable that stores the new DOM element
            var $newListItem = $(
                '<div class="taskdiv">' + 
                    '<input type="checkbox" class="task" value="' + newTask + '" />' + 
                    newTask + 
                '</div>'
            );

            // Assign a new color to the newly created list item before we insert it into the DOM
            $newListItem.css('backgroundColor', getRandomColor());

            // Insert our colorful list item into the list
            $('#tasklist').append($newListItem);

        }
        $tbtask.val("").focus();
    });

    function getRandomColor() {
        var color = '#';
        var letters =['000000','FF0000','00FF00','0000FF','FFFF00','00FFFF','FF00FF','C0C0C0'];
        color += letters[Math.floor(Math.random() * letters.length)];

        return color;
    }
});