【问题标题】:How to show/hide selected container from drop down menu?如何从下拉菜单中显示/隐藏选定的容器?
【发布时间】:2018-02-27 07:12:39
【问题描述】:

我有单页应用程序,用户应该能够从主菜单中选择值并在屏幕上显示容器。如果他们选择不同的值,那么除了该容器之外的所有内容都应该不可见。这是我的html示例。

$("#mainpg-menu li a").on('click', function(){
	$(this).parent().addClass('active').siblings().removeClass('active');
});
<!DOCTYPE html>
<html lang="en">
    <head>
        <title>Hearing Application</title>
        <meta charset="utf-8">
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <meta id="keep-alive-config" content="<cfoutput>#Application.sessionMinutes#</cfoutput>"/>
        <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
        <script language="javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
        <script language="javascript" src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
        <script src="Bootstrap/Bootstrap_Confirmation/bootstrap-confirmation.js"></script>
        <link rel="stylesheet" href="CSS/Main.css">
    </head>
    <body>
        <div class="container" style="background-color:red; height:600px;">
        	<nav class="navbar navbar-default">
        		<div class="container-fluid">
				    <p class="navbar-text"><b>Welcome to My Application!</b></p>
				    <ul class="nav navbar-nav navbar-right">
                        <li class="dropdown">
                            <a class="dropdown-toggle" data-toggle="dropdown" href="#">Menu<span class="caret"></span></a>
                            <ul class="dropdown-menu" id="mainpg-menu">
                                <li><a href="#" id="container1">Container 1</a></li>
                                <li><a href="#" id="container2">Container 2</a></li>
                                <li><a href="#" id="container3">Container 3</a></li>
                                <li><a href="#" id="container4">Container 4</a></li>
                            </ul>
                        </li>
				    	<li>
                            <a href="#" data-toggle="popover">
                            <span class="glyphicon glyphicon-user"></span> jcrew</a>
                        </li>
				      	<li>
                            <a href="#" data-toggle="confirmation">
                            <span class="glyphicon glyphicon-log-in"></span> Logout</a>
                        </li>
				    </ul>
				</div>
			</nav>
      <div id="container1"></div>
      <div id="container2"></div>
      <div id="container3"></div>
      <div id="container4"></div>
        </div>
     </body>
</html>

每个容器都应该使用主容器的整个空间并显示内容。每次用户选择不同的容器时,所有其他容器都应该是不可见的。我用过这个方法:

$('.container > div[id=' + id + ']').show();
$('.container > div:not([id=' + id + '])').hide();

id 应该有当前选择的元素 id。这适用于大多数浏览器,但我在 Safari 中发现了一些问题。由于某种原因,以前的容器未设置为display:none。由于我使用的是Bootstrap-twitter 和 JQuery,我想知道是否有更好的方法来处理这种情况?我需要在跨浏览器中可靠且兼容的东西。如果有人知道最好的方法,请告诉我。谢谢。

【问题讨论】:

    标签: javascript jquery html css twitter-bootstrap


    【解决方案1】:

    您多次使用 id,一个 id 应该只使用一次,因为它必须是唯一的。所以我从导航项中删除了 id!

    我将类名 testclass 添加到应该根据导航中做出的决定显示/隐藏的 div 中,当单击导航项时,它将隐藏类 testclass 的所有元素。 然后我在导航项中添加了属性data-target-id,该属性将包含应该再次显示的元素(div)的id。

    还是不明白?看看:https://codepen.io/joostm020/pen/YeRwJG

    示例代码:

    $("#mainpg-menu li a").on('click', function(){
    	$(this).parent().addClass('active').siblings().removeClass('active');
      $(".testclass").hide();
      $("#" + $(this).attr("data-target-id")).show();
    });
    <!DOCTYPE html>
    <html lang="en">
        <head>
            <title>Hearing Application</title>
            <meta charset="utf-8">
            <meta name="viewport" content="width=device-width, initial-scale=1">
            <meta id="keep-alive-config" content="<cfoutput>#Application.sessionMinutes#</cfoutput>"/>
            <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
            <script language="javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
            <script language="javascript" src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
            <script src="Bootstrap/Bootstrap_Confirmation/bootstrap-confirmation.js"></script>
            <link rel="stylesheet" href="CSS/Main.css">
        </head>
        <body>
            <div class="container" style="background-color:red; height:600px;">
            	<nav class="navbar navbar-default">
            		<div class="container-fluid">
    				    <p class="navbar-text"><b>Welcome to My Application!</b></p>
    				    <ul class="nav navbar-nav navbar-right">
                            <li class="dropdown">
                                <a class="dropdown-toggle" data-toggle="dropdown" href="#">Menu<span class="caret"></span></a>
                                <ul class="dropdown-menu" id="mainpg-menu">
                                    <li><a href="#" data-target-id="container1">Container 1</a></li>
                                    <li><a href="#" data-target-id="container2">Container 2</a></li>
                                    <li><a href="#" data-target-id="container3">Container 3</a></li>
                                    <li><a href="#" data-target-id="container4">Container 4</a></li>
                                </ul>
                            </li>
    				    	<li>
                                <a href="#" data-toggle="popover">
                                <span class="glyphicon glyphicon-user"></span> jcrew</a>
                            </li>
    				      	<li>
                                <a href="#" data-toggle="confirmation">
                                <span class="glyphicon glyphicon-log-in"></span> Logout</a>
                            </li>
    				    </ul>
    				</div>
    			</nav>
          <div class="testclass" id="container1">Test container1</div>
          <div class="testclass" id="container2">Test container2</div>
          <div class="testclass" id="container3">Test container3</div>
          <div class="testclass" id="container4">Test container4</div>
            </div>
         </body>
    </html>

    【讨论】:

      【解决方案2】:

      您可以简单地在所有容器上添加另一个标识符以可靠地匹配它们。

      <div id="container1" container></div>
      <div id="container2" container></div>
      <div id="container3" container></div>
      <div id="container4" container></div>
      

      然后您可以隐藏每个容器并仅显示相应的 ID。

      $('[container]').hide();
      $('#' + id).show();
      

      这应该适用于除最古老的浏览器之外的所有浏览器。如果您需要对古代浏览器的支持,而不是自定义属性,您可以在这些容器上使用自定义类并通过它进行选择。

      (另请注意,如果您想按 ID 进行选择,则无需进行不必要的特定。ID 必须是唯一的)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-10-06
        • 2014-10-01
        • 2017-12-16
        • 1970-01-01
        • 2010-12-07
        • 1970-01-01
        • 1970-01-01
        • 2012-08-03
        相关资源
        最近更新 更多