根据链接的点击href显示/隐藏元素

时间:2012-06-26 15:47:30

标签: javascript html css

我是JavaScript新手,现在非常绝望

我有一个HTML文件:

  1. 从XML文件中获取数据并将其显示在各种div(例如)
  2. 这些div(默认情况下)由类名(class ='box')
  3. 隐藏
  4. 单击链接时,我将'href'传递给showContent函数,删除#,然后在文档中查找具有该ID的元素。
  5. 然后我添加一个新的类名('show') - 以便显示此元素!
  6. 如果您运行代码,您将看到每次单击链接时都会显示新的div ...

    当前的问题:

    1. 使用新点击的ID替换已显示的div,以便每次只显示一个div。
    2. 如何避免在每个标记中插入onClick事件 - 并使其更加自动化?

    3. 我的代码如下:

      function showContent(obj)
      {
      var linkTo = obj.getAttribute("href");
      var newlinkTo=linkTo.replace('#','');
      //alert (newlinkTo);
      
      document.getElementById(newlinkTo).innerHTML=" This is where the xml variable content should go";   
      document.getElementById(newlinkTo).className += " Show";
      
      return true;
      }
      
      <a href="#b0" onClick="return showContent(this);">
      <div id="text_content"> link2 </div>
      </a>
      
      <a href="#b1" onClick="return showContent(this);">
      <div id="text_content"> link 1 </div>
      </a>
      
      <div class='box' id='b0'> abstract content </div>
      <div class='box' id='b1'> introduction content </div>
      

3 个答案:

答案 0 :(得分:2)

我通常不会到处使用jQuery,但是你可以这样做:

<a class='showContent' data='b0'/>

你的js:

var selected;

$('a.showContent').on('click',function(e){
     var toShow = $(this).attr('data');
     if(selected!==undefined) selected.removeClass('Show');
     selected = $(div+'#'+toShow);
     selected.addClass('Show');
 });

不确定这是否是您想要的,但我想我会建议。

答案 1 :(得分:1)

有一种清洁方式可以做到这一点:

这只是我的简单示例,它可以比这更清洁,但这适用于您的情况:

HTML:

<a href="#b0" id="b0-link" class="link" rel="b0">link b0</a>

<a href="#b1" id="b1-link" class="link" rel="b1">link b1</a>

<div class='box' id='b0'> abstract content </div>
<div class='box' id='b1'> introduction content </div>​​​​​​​​​

CSS:

#b0 { display: none; }

#b1 { display: none; }

a, div.text_content { display: inline; padding: 0 10px; }

JQUERY:

​$('.link').click(function(){
    var id = $(this).attr("rel");

    $('#'+id).slideToggle('slow');                      
});

每个链接都必须具有REL属性,该属性与您尝试显示的div元素的ID相同。

以下是该示例的JSFiddle:

http://jsfiddle.net/CUJSM/5/

答案 2 :(得分:0)

没有jQuery,这种事情并不难。

我建议对Javascript激活的链接使用hash-bang(#!)将其与其他可能的哈希链接分开。 (脚本在底部)

<div id="nav-links">

    <a href="#!b0">
    <div id="text_content"> link2 </div>
    </a>

    <a href="#!b1">
    <div id="text_content"> link 1 </div>
    </a>

</div>

<div class='box' id='b0'> abstract content </div>
<div class='box' id='b1'> introduction content </div>

<script type="text/javascript">

    var links = document.getElementById('nav-links').getElementsByTagName('a');
    for(var i = 0, link; link = links[i]; i++) {
        link.onclick = showContent;
        // Hide content divs by default
        getContentDiv(link).style.display = 'none';
    }
    // Show the first content div
    if(links.length > 0) showContent.apply(links[0]);

    var current;

    function showContent() {

        // hide old content
        if(current) current.style.display = 'none';

        current = getContentDiv(this);
        if(!current) return true;

        //current.innerHTML = "This is where the xml variable content should go";
        current.style.display = 'block';

        return true;

    }

    function getContentDiv(link) {

        var linkTo = link.getAttribute('href');

        // Make sure the link is meant to go to a div
        if(linkTo.substring(0, 2) != '#!') return;
        linkTo = linkTo.substring(2);

        return document.getElementById(linkTo);

    }

</script>​