将单击元素的ID作为类名分配给另一个元素

时间:2012-01-22 23:44:01

标签: javascript jquery

我正在开发一个项目,但我写的代码确实是错误的:

$('#lart').click(function(){
  $("#form3").addClass("lart");
});
$('#posht').click(function(){
  $("#form3").addClass("posht");
});
$('#majt').click(function(){
  $("#form3").addClass("majt");
});
$('#djatht').click(function(){
  $("#form3").addClass("djatht");
});

我想用switch语句制作它,但我不知道如何为这些情况制作变量。上面的代码无法正常工作,因为当我单击更多选项时,它会添加更多类,我不希望它添加更多类,只需其中一个(lart,posht,djatht,majt)。

如果我希望它有两对,比如只是用posht和majt用djath改变lart,顺便说一下这就是ids的含义:lart = up posht = down majt = left djatht = right so if我单击向上按钮,然后我点击右边的类,保持它只是要添加1个名为right或left的类!或者,如果我单击向下按钮,那么我可以更改右侧或左侧但是(向下和向左/向右或向上和向左/向右)是否可以这样做?

4 个答案:

答案 0 :(得分:4)

不需要switch语句。只需选择所有元素,绑定事件处理程序,并将ID用作类:

$('#lart, #posht, #majt, #djatht').click(function(){
    $("#form3").prop('class', this.id);
});

如果你想确定你没有删除任何其他类,请使用:

$('#lart, #posht, #majt, #djatht').click(function(){
    $("#form3").removeClass('lart posht majt djatht').addClass(this.id);
});

更新解决了评论中发布的问题(为了便于理解,我将使用英文单词进行说明):

var opposites = {
        up:     'down',
        down:   'up',
        right:  'left',
        left:   'right'
    };

$('#up, #right, #down, #left').click(function() {

    $("#form3").addClass(this.id).removeClass( opposites[this.id] );
});

答案 1 :(得分:2)

更新:一次只附加一个课程。

$("#lart,#posht,#majt,#djatht").click(function() {
   $("#form3").attr('class',this.id);
});

答案 2 :(得分:1)

不确定您为什么逃过引号,但如果您一次只想要一个班级,请使用...

.prop('class', this.id);

...而不是addClass

答案 3 :(得分:1)

我在这里使用data-属性而不是类名。

$.each(['lart', 'posht', 'djatht', 'majt'], function (idx, id) {
  $('#' + id).click(function () {
    $('#form3').attr('data-selected', id)
  })
})

这样,每次单击其中一个触发器时,都会覆盖以前的值。如有必要,您可以使用CSS选择器中的data-属性:

#form3[data-selected="lart"] {
  ...
}