2014-07-10 153 views
0

我想更改元素的类,但是当类更改时,它不会应用我为它编写的CSS。任何帮助?该代码是:操作Dom元素

HTML

<div id ='tot'> 
<button type='button' class='cls1' id='id1'></button> 

<button type='button' class='cls2' id='id2'></button> 

<button type='button' class='cls3' id='id3'></button> 

<button type='button' class='cls4' id='id4'></button> 

<button type='button' id='start'>Click Me!</button> 
</div> 

CSS

.cls1{ 
    position: absolute; 
    background-color: red; 
    width: 12%; 
    height: 12%; 
    border: 2px solid black; 

    } 

.cls12{ 
    position: absolute; 
    background-color: #C24641; 
    width: 12%; 
    height: 12%; 
    border: 2px solid black; 

    } 

JQUERY

$(document).ready(function(){ 

     $('#start').click(function(){ 

      game(); 
     }) 

     function game(){ 

      var x = Math.floor((Math.random() * 4) + 1); 
      change1(x); 
     } 

     function change1(y){ 

      var z = 'cls' + y; 
      var t = 'cls' + y + 2; 
      alert(z); 
      alert(t); 
      schimb = document.getElementsByClassName(z); 
      $(schimb).removeClass(z); 
      $(schimb).addClass(t); 

     } 


    }) 

当我改变埃尔从1级到12级,它只是不适用CSS ...

+0

http://jsfiddle.net/RQ5jf/ – Mohsenr1

+0

谢谢mohsenr1!我的问题已经回答了这个帖子可以关闭 –

回答

2

你使用jQuery如此有没有必要选择使用getElementsByClassName方法,因为它不是在所有的浏览器中定义的元素:

function change1(y){ 
     var z = 'cls' + y; 
     var t = 'cls' + y + 2; 
     alert(z); 
     alert(t); 
     $("." + z).removeClass(z).addClass(t); 
    } 
+0

你确实是对的,我认为通过将$应用到选定的元素,它将会好起来似乎不是:P。你! –

1

您可以使用jQuery来获取目标元素。 jQuery的不接受元素作为参数数组,所以$(schimb)不会返回元素

function change1(y) { 
    var z = 'cls' + y; 
    var t = 'cls' + y + 2; 
    $('.'+z).removeClass(z).addClass(t); 
} 

演示:Fiddle - 看看你的控制台日志,看看发生了什么

+0

你显然是对的。非常感谢你! –

1

我做你的代码的一些变化:

  • 你显然需要对所有按钮的CSS类,如果你想他们的风格

  • 删除position:absolute;因为它涵盖了“开始”按钮

  • 如果你只有cls12你需要常换常到,而不是例如cls32的情况下,第一个是cls3

  • 使用选择的类名可能会导致一些浏览器的问题,在纯JS通过只使用选择ID - 它在代码中被替换的jQuery选择

看到这个小提琴:http://jsfiddle.net/2c2dx/

$(document).ready(function() { 

    $('#start').click(function() { 

     game(); 
    }) 

    function game() { 

     var x = Math.floor((Math.random() * 4) + 1); 
     change1(x); 
    } 

    function change1(y) { 

     var z = 'cls' + y; 
     var t = 'cls' + y + 2; 
     alert(z); 
     alert(t); 
     schimb = $('.' + z); 
     $(schimb).removeClass(z); 
     $(schimb).addClass('cls12'); 
    } 
}) 

我也想建议如下修改:即使

  • 使用分号如果你不必这样做,这可能会导致问题,如果你稍后再尝试找到它们,会让你发疯。

  • 使用有意义的变量;你应该知道它们是什么只是看着他们通过以下方式

  • 优化代码

HTML:

<button type='button' class='changable' id='changable-1'></button> 
<button type='button' class='changable' id='changable-2'></button> 
<button type='button' class='changable' id='changable-3'></button> 
<button type='button' class='changable' id='changable-4'></button> 
<button type='button' id='start'>Click Me!</button> 

CSS:

.changable { 
    background-color: red; 
    width: 12%; 
    height: 12%; 
    border: 2px solid black; 
} 

.changed { 
    background-color: #0000FF; 
    width: 12%; 
    height: 12%; 
    border: 2px solid black; 
} 

JS:

$(document).ready(function() { 

    $('#start').click(function() { 

     game(); 
    }); 

    function game() { 

     var buttonToChange = $('#changable-' + Math.floor((Math.random() * 4) + 1)); 
     change1(buttonToChange); 
    } 

    function change1(button) { 

     button.removeClass('changable').addClass('changed'); 
    } 
}); 

的jsfiddle:http://jsfiddle.net/Cx5VK/

+0

你的代码看起来更好,说实话。我确实对所有4个按钮都有css,这与我遇到的问题无关。如果你有时间,即使它没有与后呃相关我试图做到这一点:改变cls1在cls 21,然后0.5秒后cls1更改CLS1我这样做,但我看不出颜色如何变化: ! –

+0

@LucianTarna你的意思是这样吗?http://jsfiddle.net/BN2s6/ – Dropout

+0

就是这样,但我需要这样做8次(所以在for的帮助下,你生成一个随机数的班级变化类然后改回它,生成另一个随机数等等,连续8次。问题是我看不到变化:| :(即使它确实改变它它不显示我的铬) –