首页 文章

单击div时显示div并隐藏兄弟姐妹

提问于
浏览
1

我在查找如何编写适当的javascript或jquery以显示特定div时遇到很多麻烦,当点击我的可点击div时,同时隐藏之前点击的同一类中的所有其他div .

HTML

<img src="images/Current system & actors.jpg" alt="" usemap="#Map" style="left:275px; position:absolute; top:247px; width:100%; z-index:1; " usermap="#mymap" >

<div id="items" >       
    <div class="sqtrigger" id="xcrudeoil" style="position:absolute; left:200px; top:200px; " onclick="MM_showHideLayers('crudeoil','','show')" ></div>
    <div class="sqtrigger" id="xNP" style="position:absolute; left:300px; top:200px; " onclick="MM_showHideLayers('NP','','show')" ></div>
</div>

<div id="info" >
    <div id="crudeoil" class="textbox" >Crude oil description </div>
    <div id="NP" class="textbox" >NP description</div>
</div>

JAVASCRIPT

function MM_showHideLayers() { //v9.0
    var i,p,v,obj,args=MM_showHideLayers.arguments;

    for (i=0; i<(args.length-2); i+=3) {
        with (document) if (getElementById && ((obj=getElementById(args[i]))!=null)) {
            v=args[i+2];

            if (obj.style) { 
                obj=obj.style; v=(v=='show')?'visible':(v=='hide')?'hidden':v; 
            }

            obj.visibility=v; 
        }
    }
}

我已经找到了使用 <area> 标签执行此操作的信息,但是我想避免将我的可点击div重写到我的 Map 中的区域,因为我有超过100个可点击的div,现在需要一个解决方案...

示例 - > http://jsfiddle.net/berqK/4/

var links = document.getElementById('oshastatemap');

for (var i = 0; i < links.children.length; i++) {
    links.children[i].onclick = function(ev) {
        target_id = this.id.replace('x', '');
        s = document.getElementById(target_id);
        states = document.getElementsByClassName('show');

        for (var j = 0; j < states.length; j++) {
            states[j].className = '';
        }

        s.className = 'show';
    };
}

那么,我如何调整这个代码,我发现在单击链接时显示div,在单击 div 时显示div而隐藏其他代码?

参考我的div ...我怎样才能使id =“xcrudeoil”show id =“crudeoil”(和xNP显示NP)同时隐藏div id = info的所有子div(或者在class =“textbox中) “)?

以下是我迄今为止所做工作的一个示例 . (注意:在我的浏览器中显示div,但我在fsfiddle中看不到它们):http://jsfiddle.net/ZCantrall/Ru82F/6/

非常感谢提前!我非常感谢您提供的任何建议 .

*编辑//使用/jsfiddle.net/Ru82F/7/中的CSS和以下HTML&JS进行第二次尝试

<html><head>
    <title>IES</title>

<link href="IES.css" rel="stylesheet" media="screen" type="text/css" >

</head>

<body>

<div id="items" >       
<div class="sqtrigger" id="xcrudeoil" >Oil</div>    
<div class="sqtrigger" id="xNP" >NP</div>
</div>


<div id="info" >
<div id="crudeoil" class="textbox" >Crude oil description </div>
<div id="NP" class="textbox" >NP description</div>
</div>

<script> src="jquery-1.9.1.js" </script>
<script> src="jquery-migrate-1.1.0.js" </script>
<script>
    $('.sqtrigger').on('click', function(e) {
    var targetId = this.id.replace('x', '');    

    $('#info .textbox').hide();
    $('#' + targetId).show();
});
</script>

</body></html>

3 回答

  • 0

    这个小jQuery脚本将显示相关的div并隐藏其他div

    $(“target_div”) . nextAll() . hide()$(“target_div”) . prevAll() . hide()

  • 0

    当您单击触发器时,这个小的jQuery脚本将显示相关的div并隐藏其他div(可能存在css问题,我为此测试删除了它):

    $(document).ready(function() {
        $('.sqtrigger').on('click', function(e) {
            var targetId = this.id.replace('x', '');    
    
            $('#info .textbox').hide();
            $('#' + targetId).show();
        });
    });
    

    http://jsfiddle.net/Ru82F/7/

  • 0

    你能试试这个...... http://jsfiddle.net/berqK/22/

    JQuery代码......

    var links = document.getElementById('oshastatemap');
    
    for (var i = 0; i < links.children.length; i++) {
        links.children[i].onclick = function(ev) {
            target_id = this.id.replace('State', 'Layer');
            $("div[Id^='Layer']").css('display','none');
            $('#'+target_id).show();
        };
    }
    

相关问题