3

2 つの代替テキストを切り替える 2 つのラジオ ボタンがあり、機能します。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
   "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">

<head>
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"
            type="text/javascript"></script>
    <style type="text/css">
        .displayNone { display: none; }
    </style>
</head>

<body>

    <input type="radio" name="toggle" />A
    <input type="radio" name="toggle" />B

    <span class="A">A</span>
    <span class="B displayNone">B</span>

<script type="text/javascript">
    $('input[name=toggle]').change(function() {
        $('.A, .B').toggleClass('displayNone');
    })
</script>

</body>
</html>

ここで、3 つのテキストを切り替える 3 つのラジオ ボタンを作成します。

<input type="radio" name="toggle" />A
<input type="radio" name="toggle" />B
<input type="radio" name="toggle" />C

<span class="A">A</span>
<span class="B displayNone">B</span>
<span class="C displayNone">C</span>

私が考えている解決策は冗長に見えます。きれいなものは何でしょう?

4

5 に答える 5

7

もう1つのアプローチ:

$('input:radio[name="toggle"]').change(
    function(){
        $('span')
            .eq($(this).index())
            .removeClass('displayNone')
            .siblings('span')
            .addClass('displayNone');
    });​

JS フィドルのデモ


より最新のブラウザ用に、同じことを達成するための純粋な CSS 手段を追加するために編集されました。

input[type=radio]:nth-child(1):checked ~ span:nth-of-type(1),
input[type=radio]:nth-child(2):checked ~ span:nth-of-type(2),
input[type=radio]:nth-child(3):checked ~ span:nth-of-type(3){
    height: 1em;
    width: 100%;
    background-color: #f90;
    -webkit-transition: all 1s linear;
    -ms-transition: all 1s linear;
    -o-transition: all 1s linear;
    -moz-transition: all 1s linear;
    transition: all 1s linear;
}

span {
    display: block;
    overflow: hidden;
    height: 0;
    width: 0;
    background-color: #fff;
    -webkit-transition: all 1s linear;
    -ms-transition: all 1s linear;
    -o-transition: all 1s linear;
    -moz-transition: all 1s linear;
    transition: all 1s linear;
}​

JS フィドルのデモ

jQuery リファレンス:

CSS リファレンス:

于 2012-04-24T16:36:27.847 に答える
3

ここに 1 つの方法があります: jsFiddle example

$('input[name=toggle]').change(function() {
    $('span').addClass('displayNone').filter('span:eq(' + $(this).index() + ')').removeClass('displayNone');
})​
于 2012-04-24T16:37:07.520 に答える
2

楽しみのために、これはあなたのニーズに正確に合わないかもしれません. これは純粋な CSS ソリューションです。

span {
  display: none;
}

​input[type="radio"]:checked + * + * + * {
  display: inline;
}​​

</p>

于 2012-04-24T16:52:46.963 に答える
1

そして、これを行う別の方法があります(デモ:http://jsfiddle.net/bauKH/

<input type="radio" name="toggle" value="A" checked="true"/>A
<input type="radio" name="toggle" value="B"/>B
<input type="radio" name="toggle" value="C"/>C

<br />
<span id="A" class="data">A</span>
<span id="B" class="data displayNone">B</span>
<span id="C" class="data displayNone">C</span>

$('input[name=toggle]').change(function() {
    var newval = this.value;
    $(".data").each(function() {
        $(this).toggleClass('displayNone', this.id != newval);
    });                                                    
});

ここでの重要なメッセージは、.toggleClass()でオプションの 2 番目の引数を使用して、クラスを追加するか削除するかを指定できるということです。

于 2012-04-24T16:46:58.887 に答える
0

すべてのテキストスパンを同じクラスに指定しますが、IDは異なります。

<span class="foo" id="span_a">A</span>
<span class="foo displayNone" id="span_b">B</span>
<span class="foo displayNone" id="span_c">C</span>

次に、必要なものを表示する前に、それらをすべて非表示にします

function show(x) {
    $(".foo").hide();
    $("#" + x).show();
}

編集:

または、ちらつきが見られる場合は、jQueryのnotセレクターを使用できます。

$(".foo").not("#" + x).hide();
$("#" + x).show();
于 2012-04-24T16:31:58.643 に答える