0

我为同一页面中的多个链接创建了多个切换。它们都已关闭(带有加号),单击它们每个都将打开一个 div(并显示一个减号)。

我可以让切换开关工作,但我被加号和减号困住了。当一个链接打开时,所有链接都将显示减号。

每个a都有一个带有数字的 id115

我们如何只打开一个显示减号而其他所有显示加号?

请指教

这里使用的代码:

$('.questions a').removeClass('DownArrow');
$('.questions a').addClass('RightArrow');  

function toggleDiv(divId) {
    $("#"+divId).toggle();
    $('.questions a').toggleClass('DownArrow');
    $('.questions a').toggleClass('RightArrow');
}

HTML:

<div class='questions'> 
    <a class="DownArrow" id="numb-1" href="javascript:toggleDiv('myContent1');">text</a>
</div>
<div id="myContent1">
    <p>some text</p>
</div>
<div class='questions'> 
    <a class="DownArrow" id="numb-2" href="javascript:toggleDiv('myContent2');">text</a>
</div>
<div id="myContent2">
    <p>some text</p>
</div>                               

这里的CSS:

div#questions  a {  
    display:block; border:1px solid #F00; width:500px; padding:10px; 
}

div#myContent1,div#myContent2,div#myContent3,div#myContent4,div#myContent5 {
    display:none;
}

a.DownArrow {
    background:#ccc url(../images/plus.png) no-repeat 460px 8px;
}

a.RightArrow {
    background:#ccc url(../images/minus.png) no-repeat 460px 8px;
}                            
4

4 回答 4

1

如果您使用 evnet 处理程序而不是内联 onclick 分配,这会容易得多......您可以使用hrefacnchors 来定位:

修订标记

<div class='questions'> 
  <a class="DownArrow" id="numb-1" href="#myContent1">text</a>
</div>
<div id="myContent1">
  <p>some text</p>
</div>
<div class='questions'> 
  <a class="DownArrow" id="numb-2" href="#myContent2">text</a>
</div>
<div id="myContent2">
  <p>some text</p>
</div>

JS

$(function (){
   $('div.questions a').click(function (e){
        var $a = $(this),
            target = $a.attr('href');

        // toggle the classes on the a clicked
        $a.toggleClass('DownArrow RightArrow');

        $(target).toggle(); // show the DIV  
   });
});

这是一个小提琴

于 2012-09-29T23:41:34.323 回答
1

这与您所展示的有点不同,但请在这里坚持。

如果内容像手风琴/折叠内容列表样式配置一样打开,您实际上不需要所有带有ids 之类的东西。这就是 jQuery 的奇妙之处:它让遍历触手可及。

所以这实际上很容易:

<div class="questions">
    <span>+</span>
    <a href="#">text</a>
</div>
<div class="content">
    <p>some text</p>
</div>
<div class='questions'> 
    <span>+</span>
    <a href="#">text</a>
</div>
<div class="content">
    <p>some text</p>
</div>

请注意,我并没有展示所有的疯狂ids,并且我已经实现了一个content类。在我的示例中,我也使用 a<span>+</span>而不是图像作为切换箭头,但这只是因为我认为没有必要证明这一点。如果你想让我解释一下,请告诉我。

CSS的唯一相关部分:

.content {
    display: none;
}

这里我们有(非常非常简单的)jQuery:

jQuery(function load(){
    var $questions = $('.questions'),
        $content = $('.content');

    $questions.on('click', function toggle(){
        var $this = $(this),
            $selected = $this.next('.content');

        $content.not($selected).hide();

        $selected.show();

        $questions.not(this).find('span').text('+');
        $this.find('span').text('-');

        return false;
    });
});​

http://jsfiddle.net/userdude/5t2Un/

所以我所做的是...

// jQuery(); is a shortcut to $(document).ready()
jQuery(function load(){
    // I'm going to cache my elements for later.
    // I can also use $() inside this function.
    var $questions = $('.questions'),
        $content = $('.content');

    // Here I'm going to detect a click on a `div.questions`,
    // and use this as my toggle.
    $questions.on('click', function toggle(){
        var $this = $(this),
            // Notice I'm using `$.next('.content'). This is
            // how I select the appropriate `.content` for the
            // question.
            $selected = $this.next('.content');

        // Hide all content but what was selected by $.next()
        $content.not($selected).hide();

        // Now show the $this.next('.content'), which we've
        // saved a reference to $selected.
        $selected.show();

        // Toggling the + and -. You can do an $.addClass()
        // and $.removeClass() on the element here.
        $questions.not(this).find('span').text('+');
        $this.find('span').text('-');

        // Return false in case an ANCHOR was clicked, which 
        // will cancel any navigation.
        return false;
    });
});​

编辑

现在,如果.questions它们$.next()与它们无关.content(并且遍历会适得其反),您还可以在元素的某些部分中使用引用。Prodigitalson 演示了 using href="#myContent1",他将其提供给 jQuery 喜欢$(this.href)选择当前.content的 by id

我将演示另一种方法,使用data-格式。

<div class="container nav-bar">
    <div class="questions" data-content-id="#myContent1">
        <span>+</span>
        <a href="#">text</a>
    </div>
    <div class='questions' data-content-id="#myContent2"> 
        <span>+</span>
        <a href="#">text</a>
    </div>
    <div class='questions' data-content-id="#myContent3"> 
        <span>+</span>
        <a href="#">text</a>
    </div>
    <div class='questions' data-content-id="#myContent4"> 
        <span>+</span>
        <a href="#">text</a>
    </div>
    <div class='questions' data-content-id="#myContent5"> 
        <span>+</span>
        <a href="#">text</a>
    </div>
</div>

注意这部分:

<div class="questions" data-content-id="#myContent1">

现在我将使用它$.data()

$(function load() {
    var $questions = $('.questions'),
        $content = $('.content');

    $questions.on('click', function toggle() {
        var $this = $(this),
            $selected = $($this.data('content-id'));

        $content.not($selected).hide();
        $selected.show();

        $questions.not(this).find('span').text('+');
        $this.find('span').text('-');

        return false;
    });
});​

http://jsfiddle.net/userdude/VCnQn/

这与我之前展示的方法基本相同,除了:

$selected = $($this.data('content-id'));

这就是我们如何在.questions和之间建立关联.content。很容易。

于 2012-09-29T23:44:40.673 回答
0

用这个

var id=0;
while(condition){
    $("#myContent"+id).toggle();
    $('.questions a').toggleClass('DownArrow');
    $('.questions a').toggleClass('RightArrow');
    id++;
}
于 2012-09-29T23:04:36.153 回答
-1
$('questions a').each(function(){
 $(this).click(function () {
   var clicked_id = $(this).attr('id');
    //*****
    $('questions a').each(function(){ 
     if ($(this).attr('id') == clicked_id ) {$(this).attr('class', 'class_with_sign_-'); }
     else {$(this).attr('class', 'class_with_sign_+');}
     });
    //*****
 });
});
于 2012-09-29T23:03:11.827 回答