Comment changer le nom de classe en fonction des éléments du tableau?

2020-06-02 javascript html bootstrap-4

Je suis un débutant en JavaScript, donc veuillez utiliser un langage accessible.

A partir du code ci-dessous, je veux changer le nom de classe sur certains éléments du tableau; c'est-à-dire que les éléments orange, yellow, violet utilisent à la place la classe btn btn-outline-dark . En outre, cela peut-il être fait sans ajouter d'attributs id ou class qui ne sont pas Bootstrap à l'intérieur du code HTML (quelque chose comme document.getElementById() n'est pas souhaitable)?

J'ai essayé:

function Rainbow(){
    body.style.backgroundColor = colors[index % colors.length]
    index++
    if(index=1,index=2,index=5){
        button.className = 'btn btn-outline-dark'
    }
}

mais ça ne marche pas.

Code complet (n'hésitez pas à améliorer / corriger quoi que ce soit d'autre à l'intérieur):

<!doctype html>
<html lang="en">
    <head>
        <meta charset="utf-8">
        <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
        <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/css/bootstrap.min.css" integrity="sha384-9aIt2nRpC12Uk9gS9baDl411NQApFmC26EwAOH8WgZl5MYYxFfc+NcPb1dKGj7Sk" crossorigin="anonymous">
        <title>Rainbow Colors</title>
    </head>
    <body>
        <div class="container">
            <div class="row vh-100 d-flex align-items-center">
                <div class="col text-center">
                    <button class="btn btn-outline-light">Rainbow</button>
                </div>
            </div>
        </div>        

        <script>
            const colors = ['red','orange','yellow','green','blue','violet'],
            body = document.querySelector('body'),
            button = document.querySelector('button')
            let index = 1

            body.style.backgroundColor = colors[0]
            button.onclick = Rainbow

            function Rainbow(){
                body.style.backgroundColor = colors[index % colors.length]
                index++
            }
        </script>
    </body>
</html>

Answers

Je soupçonne cette ligne:

if(index=1,index=2,index=5){

ne fait pas ce que vous pensez qu'il fait. = Est l' opérateur d'affectation et , crée des expressions composées , ni qui vous aideront à ce que vous avez l' intention probable.

Essayez plutôt ceci:

if(index == 1 || index == 2 || index == 5){

|| est l' opérateur logique or et == est l' opérateur de comparaison .

C'est ce que vous cherchez peut-être, je ne sais pas quelle version de JS vous utilisez, mais voici une réponse

<!doctype html>
<html lang="en">
    <head>
        <meta charset="utf-8">
        <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
        <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/css/bootstrap.min.css" integrity="sha384-9aIt2nRpC12Uk9gS9baDl411NQApFmC26EwAOH8WgZl5MYYxFfc+NcPb1dKGj7Sk" crossorigin="anonymous">
        <title>Rainbow Colors</title>
    </head>
    <body>
        <div class="container">
            <div class="row vh-100 d-flex align-items-center">
                <div class="col text-center">
                    <button class="btn btn-outline-light">Rainbow</button>
                </div>
            </div>
        </div>        

        <script>
            const colors = ['red','orange','yellow','green','blue','violet'],
            body = document.querySelector('body'),
            button = document.querySelector('button')
            let index = 1

            body.style.backgroundColor = colors[0]
            button.onclick = Rainbow

            function Rainbow(){
                body.style.backgroundColor = colors[index % colors.length]
                color = index % colors.length;
                index++; 
                if(color == 1 || color == 2 || color == 5){
                    button.className = 'btn btn-outline-dark'
                }
                else{
                    button.className = 'btn btn-outline-light'
                }
            }
        </script>
    </body>
</html>

Related