0

同じページ内の多数のリンクに対して複数のトグルを作成しました。それらはすべて (プラス記号で) 閉じられており、クリックするとそれぞれが div を開きます (マイナス記号が表示されます)。

トグルを機能させることができましたが、プラス記号とマイナス記号に固執しています。1 つのリンクが開いている場合、すべてのリンクにマイナス記号が表示されます。

それぞれに からまでaの番号の ID があります。115

マイナス記号を表示するために開いたものだけを取得し、他のすべてをプラス記号で表示するにはどうすればよいでしょうか?

ご意見をお聞かせください

ここで使用されるコード:

$('.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

これはあなたが示したものとは少し異なりますが、ここで私に固執してください.

コンテンツがアコーディオン/折り畳み式のコンテンツ リスト スタイルの構成のように開く場合、実際には s などを使用した面倒な作業はすべて必要ありませんid。これが 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>

注意してください、私はクレイジーな s のすべてをデモンストレーションしているわけではなく、クラスidを実装しました。content私の例では<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ていない場合(およびトラバーサルが非生産的である場合) は、要素の一部内で参照を使用することもできます。Prodigitalson は を使用してデモンストレーションを行い、それを jQuery に入力して現在の を選択するようにしました。$.next().contenthref="#myContent1"$(this.href).contentid

形式を使用して、別の方法を示し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 に答える
1

インラインの onclick 割り当ての代わりに evnet ハンドラーを使用すると、これははるかに簡単になります...hrefターゲットにするには、acnchors を使用するだけです。

改訂されたマークアップ

<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 に答える
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 に答える