点击更改div类

时间:2016-09-16 09:31:00

标签: javascript html css dom

看似简单的问题令我感到困惑......所有的答案似乎只适用于JQuery。

我正在用PHP生成一个表日历。

enter image description here

日历上的每一天都是tr > td > div,目前看起来像这样:

{cal_cell_content}
    <div class="" id="event" href="" onclick="this.className=\'selected\';return getDate({day});">
        {day}
    </div>
{/cal_cell_content}

当用户点击其中一个div时,我希望该div的背景将其css类更改为“selected”。

然后,如果用户单击另一个div,我希望该类更改为selected并删除前一个类,以便任何时候只能选择一个div。

目前我正在使用this.className='selected,其工作除了可以选择多个div之外!

如何获取行为以便我可以选择单个div并突出显示它,然后如果我决定单击另一个div,则前一个div将被取消选择并且新div被“选中”?

5 个答案:

答案 0 :(得分:1)

你的div有相同的ID,这是错的,就像这样做

{cal_cell_content}
    <div class="event" href="">
        {day}
    </div>
{/cal_cell_content}


$('.event').click(function(){
   $('.event').removeClass('selected');
   $(this).addClass('selected');
});

使用javascript:

{cal_cell_content}
    <div class="event" href="" onclick="selectMe(this);">
        {day}
    </div>
{/cal_cell_content}

function selectMe(obj){
    var divs = document.getElementsByClassName("event");
    for(var i = 0; i < divs.length; i++)
    {
       divs[i].className = "event";
    }
    obj.className = "event selected"
}

答案 1 :(得分:1)

通过循环向div类添加一个事件监听器,如果单击它,则将另一个类“selected”添加到div。否则,删除“选定”类。 “selected”类将包含你的css内容。

例如,

var x = document.getElementsByClassName('yourClass')
for (var i = 0; i < x.length; i++) {
    x[i].addEventListener("click", function(){

    var selectedEl = document.querySelector(".selected");
    if(selectedEl){
        selectedEl.classList.remove("selected");
    }
    this.classList.add("selected");

    }, false);;
}

答案 2 :(得分:1)

试试这个原生javascript

document.getElementById('event').setAttribute('class', 'selected');

答案 3 :(得分:0)

$('#event').click(function(){
   $(this).attr('class', 'selected');
});

答案 4 :(得分:0)

在标准javascript中:

document.getElementById('foo').className += ' selected'

或在JQuery中:

$('#foo').addClass('selected');