0

次の html があるとします。

<dt><span class="q-num">1</span>. What is one plus one?</dt>

<dd><input type="radio" value="a" name="1" required /> 4</dd>
<dd><input type="radio" value="b" name="1" required /> 7</dd>
<dd><input type="radio" value="c" name="1" required /> 2</dd>
<dd><input type="radio" value="d" name="1" required /> 8</dd>

<dt><span class="q-num">2</span>. What is two plus two?</dt>

<dd><input type="radio" value="a" name="2" required /> 4</dd>
<dd><input type="radio" value="b" name="2" required /> 7</dd>
<dd><input type="radio" value="c" name="2" required /> 2</dd>
<dd><input type="radio" value="d" name="2" required /> 8</dd>

<dt><span class="q-num">3</span>. What is three plus three?</dt>

<dd><input type="radio" value="a" name="3" required /> 4</dd>
<dd><input type="radio" value="b" name="3" required /> 7</dd>
<dd><input type="radio" value="c" name="3" required /> 2</dd>
<dd><input type="radio" value="d" name="3" required /> 6</dd>

いずれかがクリックされたときalert()に最も近い前の値にしたい。試してみましたが、空白のアラートしか表示されません..span[class='q-num']input[type='radio']closest()

4

2 に答える 2

2

prevUntilあなたの友達です:

$(this).parent().prevUntil('dt').last().prev().find('span[class="q-num"]').text();

これがフィドルです:http://jsfiddle.net/UPRBT/


投稿したマークアップが実際のコードである場合はname、クリックしたラジオ ボタンのプロパティを使用できます。

$('input[type="radio"]').click(function () {
    alert(this.name);
});

これがフィドルです:http://jsfiddle.net/b4Sj8/


より効率的な方法は、このカスタム トラバーサル メソッドを使用することです。

$.each({
    'prevFind' : 'previousSibling',
    'nextFind' : 'nextSibling'
}, function(method, dir) {

    $.fn[method] = function (selector) {

        var elems = [];

        this.each(function(i, item) {
            while (item = item[dir]) {
                if (item.nodeType == 1) {
                    if ( $.find.matches(selector, [item]).length ) {
                        elems.push(item);
                        break;
                    }
                }
            }
        });

        return this.pushStack(elems, method, selector);
    };
});

次のように使用できます。

$(this.parentNode).prevFind('dt').find('.q-num').text()

これがフィドルです:http://jsfiddle.net/b4Sj8/1/

于 2013-02-02T23:46:26.770 に答える
0

試す

alert($(this).parent().prevAll('dt:first').find('span[class="q-num"]').text());

http://jsfiddle.net/mowglisanu/PkMGN/

于 2013-02-02T23:51:07.777 に答える