【问题标题】:JS innerHTML not displayingJS innerHTML 不显示
【发布时间】:2020-09-11 05:23:22
【问题描述】:

我正在尝试创建一个动态导航栏,当用户登录与未登录时会有所不同。

我的身份验证部分正常工作(通过控制台日志确认);但是,由于某种原因,当我使用.innerHTML = ... 时,HTML 没有得到更新。更新后,我正在控制台记录 innerHTML,它在日志中显示正确,但导航栏未按应有的方式显示。

HTML:

...
<ul class="site-menu main-menu js-clone-nav mr-auto d-none d-lg-block">
    <li><a href="#" class="nav-link"><strong>Home</strong></a></li>
    <li id ="nav-listings">
        <a href="Search.html" class="nav-link"><strong>Listings</strong></a>
    </li>
    <li><a href="#contact-section" class="nav-link"><strong>Contact</strong></a></li>
    <li class="has-children" id="nav-account">
        <a href="Signin.html" class="nav-link"><strong>Sign-In</strong></a>
        <div id="navDropdown" class="dropdown">
            <a href="User.html">Profile</a>
            <a href="Signup.html">Sign-Up</a>
        </div>
    </li>
</ul>
...

js代码:

AOS.init({
    duration: 800,
    easing: 'slide',
    once: true
 });

 jQuery(document).ready(function($) {

    "use strict";


    $(".loader").delay(1000).fadeOut("slow");
    $("#overlayer").delay(1000).fadeOut("slow");

...

    firebase.auth().onAuthStateChanged(firebaseUser => {
        if (firebaseUser) {
            var username = firebaseUser.email;
            console.log(`${firebaseUser ? `- User signed in: ${firebaseUser.email} => ${username}` : "No User Signed in"}`);
            
            document.getElementById("nav-listings").className = "has-children";
            document.getElementById("nav-listings").innerHTML = "<a href='Search.html' class='nav-link'><strong>Listings</strong></a>" +
                                                                "<div id='listDropdown' class='dropdown'>" +
                                                                    "<a href='AddHouse.html'>Add Listing</a>" +
                                                                    "<a href='User.html'>Favorites</a>" + 
                                                                "</div>";
            console.log(document.getElementById("nav-listings").innerHTML);
        } else {
            btnLogin.disabled = false;
        }
    });
 });

编辑: 它以导航栏的压缩形式出现,但主要导航栏??? 请参阅Here 获取完整代码(减去 CSS ......这使得问题很难看到,但所有的 js 和 HTML 都在那里)。

【问题讨论】:

  • 提供codepen示例,快速调试
  • 您的页面上有多少个 id="nav-listings" 的元素?您正在使用 jquery ,那么为什么不使用 $("#nav-listings").html('My HTML here'); 呢?
  • 对我来说似乎工作正常,尽管您尝试选择的元素的 id 中的空格确实不正确。 id ="nav-listings" 应该是 id="nav-listings"。这可能会搞砸你。
  • @angel.bonev 只有一个元素具有该 ID。我也试过了,但没有运气。
  • @MrKhan link 没有 CSS 但在这里

标签: javascript html firebase innerhtml


【解决方案1】:

这应该可以工作

HTML:

<ul class="site-menu main-menu js-clone-nav mr-auto d-none d-lg-block">
    <li><a href="#" class="nav-link"><strong>Home</strong></a></li>
    <li id="nav-listings">
        <a href="Search.html" class="nav-link"><strong>Listings</strong></a>
    </li>
    <li><a href="#contact-section" class="nav-link"><strong>Contact</strong></a></li>
    <li class="has-children" id="nav-account">
        <a href="Signin.html" class="nav-link"><strong>Sign-In</strong></a>
        <div id="navDropdown" class="dropdown">
            <a href="User.html">Profile</a>
            <a href="Signup.html">Sign-Up</a>
        </div>
    </li>
</ul>

JavaScript:

    firebase.auth().onAuthStateChanged(firebaseUser => {
        if (firebaseUser) {
            var username = firebaseUser.email;
            console.log(`${firebaseUser ? `- User signed in: ${firebaseUser.email} => ${username}` : "No User Signed in"}`); ;
            $("#nav-listings").addClass('has-children').html("<a href='Search.html' class='nav-link'><strong>Listings</strong></a><div id='listDropdown' class='dropdown'><a href='AddHouse.html'>Add Listing</a><a href='User.html'>Favorites</a></div>")
            console.log($("#nav-listings").html());
        } else {
            btnLogin.disabled = false;
        }
    });

【讨论】:

    【解决方案2】:

    当您设置innerHTML 时,您也将nav-listings 的类设置为has-children。这将删除现有的 nav-link 类。

    你的意思是这样做吗?如果你想保留 nav-link 类,那么而不是

    document.getElementById("nav-listings").className = "has-children";

    在 has-children 之前放置一个空格并将字符串添加到类名中。然后,这会将 has-children 添加到类中,并且不会删除导航链接。

    document.getElementById("nav-listings").className += " has-children";

    如果您控制台记录outerHTML 而不是innerHTML,您可以检查nav-link 和has-children 是否都存在。

    【讨论】:

    • 谢谢你,我知道如果你没有提出这个问题,我以后会遇到这个问题。但这并不能解决问题,我认为引导程序很奇怪。查看编辑^
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-22
    • 2020-10-05
    • 1970-01-01
    • 1970-01-01
    • 2021-11-30
    • 2023-03-11
    相关资源
    最近更新 更多