タグのクラス属性を変更し、ページをリロードせずにスタイルを適用する方法

kirsten992

ナビゲーションメニューバーのレイアウトを強化しようとしています。

達成したいのは、アクティブなメニューの項目に対して「アクティブ」なクラススタイルを設定することです。つまり、クリックしたということです。クラス「アクティブ」のスタイルは、ナビゲーションバーのアイテムを青色で強調表示するだけです(他の「非アクティブ」は灰色のままです)。

メニューのクリックされたボタンのクラスを変更し、ナビゲーションバーの他のすべてのクラスを「非アクティブ」に変更するJavaScript関数makeActive()を呼び出すonlick属性を使用してみました

ただし、スタイルによってアクティブなボタンのレイアウトが変更されないため、DOMまたはAJAXについて何かが欠けていると思います。

PD:これを純粋にバニラのJavaScript(JQueryではない)でアーカイブしたいと思います

styles.css:

/* NavBar */

.topnav {
    background-color: #333;
    overflow: hidden;
    margin: 0;
    font-family: Arial, Helvetica, sans-serif;
}

.topnav a {
    float: left;
    color: #f2f2f2;
    text-decoration: none;
    text-align: center;
    padding: 8px 16px;
    font-size: 17px;
}

.topnav a.active {
    background-color: rgb(49, 149, 250);
    color: white;
}

.topnav a:hover {
    background-color: #ddd;
    color: black;
}

index.html:

<!DOCTYPE html>
<html>
    <head>
        <title>Travel Agency</title>
        <meta charset="UTF-8">
        
        <link rel="stylesheet" type="text/css" href="styles.css">

        <script>

            function makeActive(id)
            {
                var ancestor = document.getElementsByClassName('topnav');
                var descendents = ancestor[0].getElementsByTagName('*');

                for(var i = 0; i < descendents.length; i++) {
                    if (descendents[i].className === "active" && descendents[i].id != id) {
                        descendents[i].className = "inactive";
                        break;
                    }
                }

                for(var i = 0; i < descendents.length; i++) {
                    if (descendents[i].id = id) {
                        descendents[i].className = "active";
                        break;
                    }
                }
            }

        </script>

    </head>

    <body>
        <div class="topnav">
            <a class="active" id="home" href="#home" onclick="makeActive('home')">Home</a>
            <a class="inactive" id="offers" href="#offers" onclick="makeActive('offers')">Offers</a>
            <a class="inactive" id="travels" href="#travels" onclick="makeActive('travels')">Travels</a>
            <a class="inactive" id="galery" href="#galery" onclick="makeActive('galery')">Galery</a>
            <a class="inactive" id="contact" href="#contact" onclick="makeActive('contact')">Contact</a>
            <a class="inactive" id="about" href="#about" onclick="makeActive('about')">About</a>
        </div>
    </body>
</html>

編集:解決しました!関数makeActiveのdouble ===を忘れて、動作しています。

これで、関数は次のようになります。

function makeActive(id)
{
    var ancestor = document.getElementsByClassName('topnav');
    var descendents = ancestor[0].getElementsByTagName('*');

    for(var i = 0; i < descendents.length; i++) {
        if (descendents[i].className === "active" && descendents[i].id != id) {
            descendents[i].className = "inactive";
            break;
        }
    }

    for(var i = 0; i < descendents.length; i++) {
        if (descendents[i].id === id) {
            descendents[i].className = "active";
            break;
        }
    }
}
SebestyénSzabó

まず、タイプミスdescendents[i].id = idがありdescendents[i].id == idますdescendents[i].id === id

次に、IDにアクセスできません

descendents[i].id

使用する

descendents[i].getAttribute("id")

だから解決策:

descendents[i].getAttribute("id") === id

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

ページをリロードせずにダイアログボックスにデータを表示する

分類Dev

スペースを追加せずにRプロットで1文字をイタリックスタイルに変更する方法

分類Dev

ページ名を変更せずにワードプレスのメタタイトルを変更する方法

分類Dev

ページスクロールのスタイルを動的に変更する

分類Dev

ターゲットページは、ブラウザページをロードせずにURLを変更します。このサイトの選択したページでのみユーザースクリプトを起動するにはどうすればよいですか?

分類Dev

クラスを変更せずに、ブートストラップフォームスタイルをdiv要素に適用します

分類Dev

マスターにプッシュせずにマスターからプルするたびに、ローカルの変更をgitリポジトリに適用する方法

分類Dev

Webページをリロードせずにデータベースをクエリする方法は?

分類Dev

すべての要素にクラスを適用せずに、単一の反応コンポーネントですべてのマテリアルUIタイポグラフィコンポーネントのスタイルを変更するにはどうすればよいですか?

分類Dev

ページをスクロールせずにlocation.hashを変更する

分類Dev

新しいインスタンスを作成せずにforループのクラスフィールドを変更する

分類Dev

動作を変更するクラスに属性を適用するのに適したデザインパターンはどれですか。

分類Dev

autosysを使用して現在の日付パラメータを変更せずにストアドプロシージャを実行する方法

分類Dev

各クラスに[BsonDiscriminator(Required = true)]属性を適用せずに、タイプを常にディスクリミネーターで保存する

分類Dev

別のページのcssクラスをangularjsを使用してタイトルに適用します

分類Dev

jQueryを使用してスタイル属性でタグをターゲットにし、クラスを持つ別のタグに変更する

分類Dev

JAVA新しいインスタンス参照をコピーせずにインスタンスフィールドの値を変更する方法

分類Dev

グローバルスタイルをShadowDOMに適用する正しい方法

分類Dev

ページをリロードせずにFacebookのようなボタンの言語を変更する

分類Dev

URLを変更せずにURLからパラメータを使用してページにリダイレクトする方法はありますか?

分類Dev

カスタムダイアログクラスの使用中にテキストを変更して[リスナー]をクリックする方法は?

分類Dev

スタイルクラスを上書きせずにSitecoreMVCリンクフィールドにクラス属性を追加する方法

分類Dev

ボタンクリックでページをリロードせずにjsでurlパラメータを変更する

分類Dev

matlabのグレースケール画像にkmeansクラスタリングを適用する方法

分類Dev

Chrome内部のページにカスタムスタイルを適用する

分類Dev

ページ変数を指定せずにカスタムボタンのイベントをオーバーライドする方法

分類Dev

ページ変数を指定せずにカスタムボタンのイベントをオーバーライドする方法

分類Dev

クラスを追加すると、スタイルはスムーズに移行せずに適用されます

分類Dev

ajaxリクエストでページをリロードせずにブラウザのURLを変更する

Related 関連記事

  1. 1

    ページをリロードせずにダイアログボックスにデータを表示する

  2. 2

    スペースを追加せずにRプロットで1文字をイタリックスタイルに変更する方法

  3. 3

    ページ名を変更せずにワードプレスのメタタイトルを変更する方法

  4. 4

    ページスクロールのスタイルを動的に変更する

  5. 5

    ターゲットページは、ブラウザページをロードせずにURLを変更します。このサイトの選択したページでのみユーザースクリプトを起動するにはどうすればよいですか?

  6. 6

    クラスを変更せずに、ブートストラップフォームスタイルをdiv要素に適用します

  7. 7

    マスターにプッシュせずにマスターからプルするたびに、ローカルの変更をgitリポジトリに適用する方法

  8. 8

    Webページをリロードせずにデータベースをクエリする方法は?

  9. 9

    すべての要素にクラスを適用せずに、単一の反応コンポーネントですべてのマテリアルUIタイポグラフィコンポーネントのスタイルを変更するにはどうすればよいですか?

  10. 10

    ページをスクロールせずにlocation.hashを変更する

  11. 11

    新しいインスタンスを作成せずにforループのクラスフィールドを変更する

  12. 12

    動作を変更するクラスに属性を適用するのに適したデザインパターンはどれですか。

  13. 13

    autosysを使用して現在の日付パラメータを変更せずにストアドプロシージャを実行する方法

  14. 14

    各クラスに[BsonDiscriminator(Required = true)]属性を適用せずに、タイプを常にディスクリミネーターで保存する

  15. 15

    別のページのcssクラスをangularjsを使用してタイトルに適用します

  16. 16

    jQueryを使用してスタイル属性でタグをターゲットにし、クラスを持つ別のタグに変更する

  17. 17

    JAVA新しいインスタンス参照をコピーせずにインスタンスフィールドの値を変更する方法

  18. 18

    グローバルスタイルをShadowDOMに適用する正しい方法

  19. 19

    ページをリロードせずにFacebookのようなボタンの言語を変更する

  20. 20

    URLを変更せずにURLからパラメータを使用してページにリダイレクトする方法はありますか?

  21. 21

    カスタムダイアログクラスの使用中にテキストを変更して[リスナー]をクリックする方法は?

  22. 22

    スタイルクラスを上書きせずにSitecoreMVCリンクフィールドにクラス属性を追加する方法

  23. 23

    ボタンクリックでページをリロードせずにjsでurlパラメータを変更する

  24. 24

    matlabのグレースケール画像にkmeansクラスタリングを適用する方法

  25. 25

    Chrome内部のページにカスタムスタイルを適用する

  26. 26

    ページ変数を指定せずにカスタムボタンのイベントをオーバーライドする方法

  27. 27

    ページ変数を指定せずにカスタムボタンのイベントをオーバーライドする方法

  28. 28

    クラスを追加すると、スタイルはスムーズに移行せずに適用されます

  29. 29

    ajaxリクエストでページをリロードせずにブラウザのURLを変更する

ホットタグ

アーカイブ